【问题标题】:How do I configure JsonFormatter in logging dictConfig?如何在记录 dictConfig 中配置 JsonFormatter?
【发布时间】:2018-04-30 12:46:52
【问题描述】:

我想将 logging.config.dictConfig 与 json 配置文件一起使用。但我想使用另一个类的格式化程序:pythonjsonlogger.jsonlogger.JsonFormatter

这段代码/json有什么问题:

$ cat test.json
{
    "version": 1,
    "disable_existing_loggers": "true",
    "formatters": {
        "json": {
          "class": "pythonjsonlogger.jsonlogger.JsonFormatter"
          # also tried "jsonlogger.JsonFormatter" (comment not in real file)
        }
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "DEBUG",
            "formatter": "json",
            "stream": "ext://sys.stdout"
         }
    },
    "loggers": { },
    "root": {
        "handlers": ["console"],
        "level": "DEBUG"
    }
}

代码:

import sys
sys.path.append('/usr/local/lib/python2.7/site-packages')
import json
import logging
import logging.config
from pythonjsonlogger import jsonlogger

fp = open('/test.json')
logging.config.dictConfig(json.load(fp))
fp.close()
logging.info('test log line')

输出:

test log line

预期类似 { "message": "test log line" }

【问题讨论】:

    标签: python json logging


    【解决方案1】:

    好的,很有趣,但有效:

    json:

    {
        "version": 1,
        "disable_existing_loggers": true,
        "formatters": {
            "json": {
                "()": "pythonjsonlogger.jsonlogger.JsonFormatter"
            }
        },
        "handlers": {
            "json": {
                "class": "logging.StreamHandler",
                "formatter": "json"
            }
        },
        "loggers": {
            "": {
                "handlers": ["json"],
                "level": 20
            }
        }
    }
    

    代码:

    import logging_util as safe_logging
    
    import logging.config
    import json
    
    fp = open("logger_config.json")
    config = json.load(fp)
    fp.close()
    
    logging.config.dictConfig(config)
    
    safe_logging.via_logger = logging.getLogger("JsonLogger")
    safe_logging.info("event")
    

    Formatter 也可以有格式,不知道如何,但它可以工作:

    "json": {
        "()": "pythonjsonlogger.jsonlogger.JsonFormatter",
        "format": "%(asctime)s %(levelname)s %(filename)s %(lineno)s %(message)s"
    }
    

    【讨论】:

    • 我们在哪里可以获得所有可能使用的格式化程序的列表,例如您正在使用“json”,这里还有哪些其他可能的值?
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多