version: 1

formatters:
  precise:
{% if worker_name %}
    format: '%(asctime)s - worker:{{ worker_name }} - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
{% else %}
    format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
{% endif %}

handlers:
  file:
    class: logging.handlers.TimedRotatingFileHandler
    formatter: precise
    filename: {{ LOG_FILE_PATH or "homeserver.log" }}
    when: "midnight"
    backupCount: 6  # Does not include the current log file.
    encoding: utf8

  # Default to buffering writes to log file for efficiency. This means that
  # there will be a delay for INFO/DEBUG logs to get written, but WARNING/ERROR
  # logs will still be flushed immediately.
  buffer:
    class: logging.handlers.MemoryHandler
    target: file
    # The capacity is the 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.
    capacity: 10
    flushLevel: 30  # Flush for WARNING logs as well

  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

root:
    level: {{ SYNAPSE_LOG_LEVEL or "INFO" }}

{% if LOG_FILE_PATH %}
    handlers: [console, buffer]
{% else %}
    handlers: [console]
{% endif %}

disable_existing_loggers: false