【问题标题】:How can I rename "levelname" to "level" in Python log messages?如何在 Python 日志消息中将“levelname”重命名为“level”?
【发布时间】:2018-10-22 12:23:17
【问题描述】:

我有一个 Python 日志记录配置,如下所示:

LOGGING_CONFIG:
    version: 1
    formatters:
        human:
            class: logging.Formatter
            format: '[%(asctime)s]:[%(levelname)s]: %(message)s'
        json:
            class: pythonjsonlogger.jsonlogger.JsonFormatter
            format: '%(asctime)s %(levelname)s %(message)s'
    handlers:
        console:
            class: logging.StreamHandler
            level: DEBUG
            formatter: json  # change this to 'human' when you run it locally, json in production
        file:
            class: logging.FileHandler
            filename: logfile.log
            level: DEBUG
            formatter: json
    root:  # Logging for 3rd party stuff
        level: INFO
        handlers:
            - console
            - file
    project_name:  # Logging this module
        level: DEBUG
        handlers:
            - console
            - file

对于另一个系统,我需要结构化日志记录具有一些固定名称。一个例子是它不应该是levelname,而是level。如何重命名日志字段?

我有什么:

{"asctime": "2018-10-22 14:50:19,923", "levelname": "info", "message": "foobar"}

我想要什么:

{"asctime": "2018-10-22 14:50:19,923", "level": "info", "message": "foobar"}

【问题讨论】:

  • 是的,我在输出中看到了levelname。我想看到level
  • LoggerAdapter 可能有可能

标签: python logging


【解决方案1】:

levelname 不会出现在普通的 Python 记录器中,而是出现在您使用的自定义格式化程序中。据我了解,您可以使用下面的 sn-p 来自定义它输出的字典:

class CustomJsonFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
        log_record['level'] = log_record['levelname']
        del log_record['levelname']

然后将pythonjsonlogger.jsonlogger.JsonFormatter替换为CustomJsonFormatter的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多