2019-01-29 13:07:00 +01:00
|
|
|
#
|
2023-11-21 21:29:58 +01:00
|
|
|
# This file is licensed under the Affero General Public License (AGPL) version 3.
|
|
|
|
#
|
|
|
|
# Copyright (C) 2023 New Vector, Ltd
|
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU Affero General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# See the GNU Affero General Public License for more details:
|
|
|
|
# <https://www.gnu.org/licenses/agpl-3.0.html>.
|
|
|
|
#
|
|
|
|
# Originally licensed under the Apache License, Version 2.0:
|
|
|
|
# <http://www.apache.org/licenses/LICENSE-2.0>.
|
|
|
|
#
|
|
|
|
# [This file includes modifications made by New Vector Limited]
|
2019-01-29 13:07:00 +01:00
|
|
|
#
|
|
|
|
#
|
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
|
|
|
|
import twisted.logger
|
|
|
|
|
2019-07-03 16:07:04 +02:00
|
|
|
from synapse.logging.context import LoggingContextFilter
|
2023-02-03 14:27:31 +01:00
|
|
|
from synapse.synapse_rust import reset_logging_config
|
2019-01-29 13:07:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
class ToTwistedHandler(logging.Handler):
|
|
|
|
"""logging handler which sends the logs to the twisted log"""
|
2019-05-10 07:12:11 +02:00
|
|
|
|
2019-01-29 13:07:00 +01:00
|
|
|
tx_log = twisted.logger.Logger()
|
|
|
|
|
2023-02-08 22:29:49 +01:00
|
|
|
def emit(self, record: logging.LogRecord) -> None:
|
2019-01-29 13:07:00 +01:00
|
|
|
log_entry = self.format(record)
|
2019-06-20 11:32:02 +02:00
|
|
|
log_level = record.levelname.lower().replace("warning", "warn")
|
2022-04-27 15:03:44 +02:00
|
|
|
self.tx_log.emit(
|
2020-09-18 13:56:40 +02:00
|
|
|
twisted.logger.LogLevel.levelWithName(log_level), "{entry}", entry=log_entry
|
2019-01-29 13:07:00 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-02-08 22:29:49 +01:00
|
|
|
def setup_logging() -> None:
|
2019-01-29 13:07:00 +01:00
|
|
|
"""Configure the python logging appropriately for the tests.
|
|
|
|
|
|
|
|
(Logs will end up in _trial_temp.)
|
|
|
|
"""
|
|
|
|
root_logger = logging.getLogger()
|
|
|
|
|
2023-05-22 20:49:01 +02:00
|
|
|
# We exclude `%(asctime)s` from this format because the Twisted logger adds its own
|
|
|
|
# timestamp
|
|
|
|
log_format = "%(name)s - %(lineno)d - " "%(levelname)s - %(request)s - %(message)s"
|
2019-01-29 13:07:00 +01:00
|
|
|
|
|
|
|
handler = ToTwistedHandler()
|
|
|
|
formatter = logging.Formatter(log_format)
|
|
|
|
handler.setFormatter(formatter)
|
2020-12-14 20:19:47 +01:00
|
|
|
handler.addFilter(LoggingContextFilter())
|
2019-01-29 13:07:00 +01:00
|
|
|
root_logger.addHandler(handler)
|
|
|
|
|
|
|
|
log_level = os.environ.get("SYNAPSE_TEST_LOG_LEVEL", "ERROR")
|
|
|
|
root_logger.setLevel(log_level)
|
2023-02-03 14:27:31 +01:00
|
|
|
|
2023-06-02 04:27:18 +02:00
|
|
|
# In order to not add noise by default (since we only log ERROR messages for trial
|
|
|
|
# tests as configured above), we only enable this for developers for looking for
|
|
|
|
# more INFO or DEBUG.
|
|
|
|
if root_logger.isEnabledFor(logging.INFO):
|
|
|
|
# Log when events are (maybe unexpectedly) filtered out of responses in tests. It's
|
|
|
|
# just nice to be able to look at the CI log and figure out why an event isn't being
|
|
|
|
# returned.
|
|
|
|
logging.getLogger("synapse.visibility.filtered_event_debug").setLevel(
|
|
|
|
logging.DEBUG
|
|
|
|
)
|
|
|
|
|
|
|
|
# Blow away the pyo3-log cache so that it reloads the configuration.
|
2023-02-03 14:27:31 +01:00
|
|
|
reset_logging_config()
|