summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/matrix
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2023-10-09 17:06:21 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2023-10-09 17:34:15 +0200
commitcb67bb0335554e213b823f1561251dfb9dff857e (patch)
tree8106f8b4b8e79fdfdbea7b68834b1d0574557799 /nixos/modules/services/matrix
parent67252742c17b87e04bda10babbdadbe872c7f084 (diff)
nixos/matrix-synapse: mergeable log configuration
Right now there's no trivial way to override parts of synapse's log config such as the log-level because the only thing that's changeable is the path to the log-file used by synapse and its workers. Now, there's a new option called `services.matrix-synapse.log` which contains the default log config as Nix attribute-set (except `handlers.journal.SYSLOG_IDENTIFIER`). It has default priority, so new things can be added like services.matrix-synapse.log = { my.extra.field = 23; } without discarding the rest. If desired, this can still be done via `lib.mkForce`. If the log configuration for a single worker or synapse, but not all workers should be changed, `services.matrix-synapse.settings.log_config` or `services.matrix-synapse.workers._name_.worker_log_config` can be used.
Diffstat (limited to 'nixos/modules/services/matrix')
-rw-r--r--nixos/modules/services/matrix/synapse.nix80
1 files changed, 58 insertions, 22 deletions
diff --git a/nixos/modules/services/matrix/synapse.nix b/nixos/modules/services/matrix/synapse.nix
index 1354a8cb58b4..10534ea23521 100644
--- a/nixos/modules/services/matrix/synapse.nix
+++ b/nixos/modules/services/matrix/synapse.nix
@@ -70,13 +70,12 @@ let
inherit (cfg) plugins;
};
- logConfig = logName: {
+ defaultCommonLogConfig = {
version = 1;
formatters.journal_fmt.format = "%(name)s: [%(request)s] %(message)s";
handlers.journal = {
class = "systemd.journal.JournalHandler";
formatter = "journal_fmt";
- SYSLOG_IDENTIFIER = logName;
};
root = {
level = "INFO";
@@ -84,33 +83,27 @@ let
};
disable_existing_loggers = false;
};
+
+ defaultCommonLogConfigText = generators.toPretty { } defaultCommonLogConfig;
+
logConfigText = logName:
- let
- expr = ''
- {
- version = 1;
- formatters.journal_fmt.format = "%(name)s: [%(request)s] %(message)s";
- handlers.journal = {
- class = "systemd.journal.JournalHandler";
- formatter = "journal_fmt";
- SYSLOG_IDENTIFIER = "${logName}";
- };
- root = {
- level = "INFO";
- handlers = [ "journal" ];
- };
- disable_existing_loggers = false;
- };
- '';
- in
lib.literalMD ''
Path to a yaml file generated from this Nix expression:
```
- ${expr}
+ ${generators.toPretty { } (
+ recursiveUpdate defaultCommonLogConfig { handlers.journal.SYSLOG_IDENTIFIER = logName; }
+ )}
```
'';
- genLogConfigFile = logName: format.generate "synapse-log-${logName}.yaml" (logConfig logName);
+
+ genLogConfigFile = logName: format.generate
+ "synapse-log-${logName}.yaml"
+ (cfg.log // optionalAttrs (cfg.log?handlers.journal) {
+ handlers.journal = cfg.log.handlers.journal // {
+ SYSLOG_IDENTIFIER = logName;
+ };
+ });
in {
imports = [
@@ -394,6 +387,47 @@ in {
'';
};
+ log = mkOption {
+ type = types.attrsOf format.type;
+ defaultText = literalExpression defaultCommonLogConfigText;
+ description = mdDoc ''
+ Default configuration for the loggers used by `matrix-synapse` and its workers.
+ The defaults are added with the default priority which means that
+ these will be merged with additional declarations. For instance
+ the log-level for synapse and its workers can be changed like this:
+
+ ```nix
+ { lib, ... }: {
+ services.matrix-synapse.log.root.level = lib.mkForce "WARNING";
+ }
+ ```
+
+ And another field can be added like this:
+
+ ```nix
+ {
+ services.matrix-synapse.log = {
+ loggers."synapse.http.matrixfederationclient".level = "DEBUG";
+ };
+ }
+ ```
+
+ Additionally, the field `handlers.journal.SYSLOG_IDENTIFIER` will be added to
+ each log config, i.e.
+ * `synapse` for `matrix-synapse.service`
+ * `synapse-<worker name>` for `matrix-synapse-worker-<worker name>.service`
+
+ This is only done if this option has a `handlers.journal` field declared.
+
+ To discard all settings declared by this option for each worker and synapse,
+ `lib.mkForce` can be used.
+
+ To discard all settings declared by this option for a single worker or synapse only,
+ [](#opt-services.matrix-synapse.workers._name_.worker_log_config) or
+ [](#opt-services.matrix-synapse.settings.log_config) can be used.
+ '';
+ };
+
settings = mkOption {
default = { };
description = mdDoc ''
@@ -1008,6 +1042,8 @@ in {
# default them, so they are additive
services.matrix-synapse.extras = defaultExtras;
+ services.matrix-synapse.log = defaultCommonLogConfig;
+
users.users.matrix-synapse = {
group = "matrix-synapse";
home = cfg.dataDir;