diff --git a/abra.sh b/abra.sh index 06b099a..01bb8cc 100644 --- a/abra.sh +++ b/abra.sh @@ -1,3 +1,4 @@ export ENTRYPOINT_CONF_VERSION=v1 export NGINX_CONFIG_VERSION=v1 export HOMESERVER_YAML_VERSION=v1 +export LOG_CONFIG_VERSION=v1 diff --git a/compose.yml b/compose.yml index 1206d19..3652856 100644 --- a/compose.yml +++ b/compose.yml @@ -49,6 +49,8 @@ services: configs: - source: homeserver_yaml target: /data/homeserver.yaml + - source: log_config + target: /data/log.config - source: entrypoint_conf target: /docker-entrypoint.sh mode: 0555 @@ -98,6 +100,10 @@ configs: name: ${STACK_NAME}_nginx_config_${NGINX_CONFIG_VERSION} file: nginx.conf.tmpl template_driver: golang + log_config: + name: ${STACK_NAME}_log_config_${LOG_CONFIG_VERSION} + file: log.config.tmpl + template_driver: golang secrets: db_password: diff --git a/homeserver.yaml.tmpl b/homeserver.yaml.tmpl index 605ce91..55df6bc 100644 --- a/homeserver.yaml.tmpl +++ b/homeserver.yaml.tmpl @@ -778,7 +778,7 @@ database: # A yaml python logging config file as described by # https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema # -log_config: "/data/{{ env "DOMAIN" }}.config" +log_config: "/data/log.config" ## Ratelimiting ## diff --git a/log.config.tmpl b/log.config.tmpl new file mode 100644 index 0000000..2485ad2 --- /dev/null +++ b/log.config.tmpl @@ -0,0 +1,84 @@ +# Log configuration for Synapse. +# +# This is a YAML file containing a standard Python logging configuration +# dictionary. See [1] for details on the valid settings. +# +# Synapse also supports structured logging for machine readable logs which can +# be ingested by ELK stacks. See [2] for details. +# +# [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema +# [2]: https://matrix-org.github.io/synapse/latest/structured_logging.html + +version: 1 + +formatters: + precise: + format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s' + +handlers: + file: + class: logging.handlers.TimedRotatingFileHandler + formatter: precise + filename: /var/log/matrix-synapse/homeserver.log + when: midnight + backupCount: 3 # Does not include the current log file. + encoding: utf8 + + # Default to buffering writes to log file for efficiency. + # WARNING/ERROR logs will still be flushed immediately, but there will be a + # delay (of up to `period` seconds, or until the buffer is full with + # `capacity` messages) before INFO/DEBUG logs get written. + buffer: + class: synapse.logging.handlers.PeriodicallyFlushingMemoryHandler + target: file + + # The capacity is the maximum number of log lines that are buffered + # before being written to disk. Increasing this will lead to better + # performance, at the expensive of it taking longer for log lines to + # be written to disk. + # This parameter is required. + capacity: 10 + + # Logs with a level at or above the flush level will cause the buffer to + # be flushed immediately. + # Default value: 40 (ERROR) + # Other values: 50 (CRITICAL), 30 (WARNING), 20 (INFO), 10 (DEBUG) + flushLevel: 30 # Flush immediately for WARNING logs and higher + + # The period of time, in seconds, between forced flushes. + # Messages will not be delayed for longer than this time. + # Default value: 5 seconds + period: 5 + + # A handler that writes logs to stderr. Unused by default, but can be used + # instead of "buffer" and "file" in the logger handlers. + console: + class: logging.StreamHandler + formatter: precise + +loggers: + synapse.storage.SQL: + # beware: increasing this to DEBUG will make synapse log sensitive + # information such as access tokens. + level: INFO + + twisted: + # We send the twisted logging directly to the file handler, + # to work around https://github.com/matrix-org/synapse/issues/3471 + # when using "buffer" logger. Use "console" to log to stderr instead. + handlers: [file] + propagate: false + +root: + level: INFO + + # Write logs to the `buffer` handler, which will buffer them together in memory, + # then write them to a file. + # + # Replace "buffer" with "console" to log to stderr instead. (Note that you'll + # also need to update the configuration for the `twisted` logger above, in + # this case.) + # + handlers: [buffer] + +disable_existing_loggers: false