Код: Выделить всё
import logging
from logging import Formatter
class CustomLogger(logging.Logger):
def __init__(self, name, extra={}):
super().__init__(name)
self.extra = extra
def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False, **kwargs):
if extra is None:
extra = self.extra
else:
extra.update(self.extra)
super()._log(level, msg, args, exc_info, extra, stack_info, **kwargs)
logger = CustomLogger("test-logger", {"instance_name": "name", "instance_id": 12})
console_handler = logging.StreamHandler()
formatter = Formatter(
"%(asctime)s - %(levelname)s - instance name: %(instance_name)s - instance id: %(instance_id)i - %(message)s"
)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
Код: Выделить всё
logger.info("Hello world")
# 2024-11-14 16:22:51,320 - INFO - name: name - id: 12 - Hello world
Код: Выделить всё
logging.setLoggerClass(CustomLogger)
retrieved_logger = logging.getLogger("test-logger")
# doesn't print anything
retrieved_logger.info("Hello world")
logger.handlers, retrieved_logger.handlers
# ([], [])
Код: Выделить всё
logger is retrieved_logger
# False
Подробнее здесь: https://stackoverflow.com/questions/791 ... -correctly
Мобильная версия