python 日志记录 - 使用 JSON 日志,我可以为每个日志添加“额外”值吗?

nac*_*son 6 python python-3.x structured-logging python-logging

我正在使用 python日志记录模块以及python-json-logger,我想添加一些键:

{
  "app_name": "myapp",
  "env": "prod"
}
Run Code Online (Sandbox Code Playgroud)

自动查看我的所有日​​志,无需执行以下操作。

{
  "app_name": "myapp",
  "env": "prod"
}
Run Code Online (Sandbox Code Playgroud)

但要让它像我一样工作。:)

cul*_*zie 2

我只需使用我需要的自定义逻辑包装主日志记录类,如下所示:

import logging

class CustomLogger(object):
    def __init__(self, logger_name, log_format, extra=None):
        logging.basicConfig(format=log_format)
        self.logger = logging.getLogger(logger_name)
        self.extra = extra

    def debug(self, msg, *args, **kwargs):
        self.logger.debug(msg, *args, extra=self.extra, **kwargs)

    def info(self, msg, *args, **kwargs):
        self.logger.info(msg, *args, extra=self.extra, **kwargs)

    def warning(self, msg, *args, **kwargs):
        self.logger.warning(msg, *args, extra=self.extra, **kwargs)

    def error(self, msg, *args, **kwargs):
        self.logger.error(msg, *args, extra=self.extra, **kwargs)
Run Code Online (Sandbox Code Playgroud)

然后,只要您需要记录器,就从该类创建它:

from custom_logging import CustomLogger

logger_name = 'my_logger'       
log_format = '%(asctime)-15s %(app_name)-8s %(env)-8s %(message)s'
extras = {"app_name": "myapp", "env": "prod"}

logger = CustomLogger(logger_name, log_format, extras)
logger.info('Testing it out')
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!