Unverified Commit 3357e6df authored by Maximilian Bosch's avatar Maximilian Bosch Committed by GitHub
Browse files

Merge pull request #260008 from Ma27/synapse-log-config

nixos/matrix-synapse: mergeable log configuration
parents e0b3b074 e5928d9a
Loading
Loading
Loading
Loading
+60 −22
Original line number Diff line number Diff line
@@ -72,13 +72,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";
@@ -86,33 +85,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 = [
@@ -396,6 +389,49 @@ 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. These additional
          declarations also take precedence over the defaults when declared
          with at least normal priority. For instance
          the log-level for synapse and its workers can be changed like this:

          ```nix
          { lib, ... }: {
            services.matrix-synapse.log.root.level = "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 ''
@@ -993,6 +1029,8 @@ in {
    # default them, so they are additive
    services.matrix-synapse.extras = defaultExtras;

    services.matrix-synapse.log = mapAttrsRecursive (const mkDefault) defaultCommonLogConfig;

    users.users.matrix-synapse = {
      group = "matrix-synapse";
      home = cfg.dataDir;