69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
| # Copyright 2019 New Vector Ltd
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| import logging
 | |
| import os
 | |
| 
 | |
| import twisted.logger
 | |
| 
 | |
| from synapse.logging.context import LoggingContextFilter
 | |
| from synapse.synapse_rust import reset_logging_config
 | |
| 
 | |
| 
 | |
| class ToTwistedHandler(logging.Handler):
 | |
|     """logging handler which sends the logs to the twisted log"""
 | |
| 
 | |
|     tx_log = twisted.logger.Logger()
 | |
| 
 | |
|     def emit(self, record: logging.LogRecord) -> None:
 | |
|         log_entry = self.format(record)
 | |
|         log_level = record.levelname.lower().replace("warning", "warn")
 | |
|         self.tx_log.emit(
 | |
|             twisted.logger.LogLevel.levelWithName(log_level), "{entry}", entry=log_entry
 | |
|         )
 | |
| 
 | |
| 
 | |
| def setup_logging() -> None:
 | |
|     """Configure the python logging appropriately for the tests.
 | |
| 
 | |
|     (Logs will end up in _trial_temp.)
 | |
|     """
 | |
|     root_logger = logging.getLogger()
 | |
| 
 | |
|     # 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"
 | |
| 
 | |
|     handler = ToTwistedHandler()
 | |
|     formatter = logging.Formatter(log_format)
 | |
|     handler.setFormatter(formatter)
 | |
|     handler.addFilter(LoggingContextFilter())
 | |
|     root_logger.addHandler(handler)
 | |
| 
 | |
|     log_level = os.environ.get("SYNAPSE_TEST_LOG_LEVEL", "ERROR")
 | |
|     root_logger.setLevel(log_level)
 | |
| 
 | |
|     # 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.
 | |
|     reset_logging_config()
 |