Python中的自定义格式化程序无法处理格式化的日志消息

2024-10-02 00:39:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python Flask应用程序中有一个自定义格式化程序,我已将其添加到根记录器中:

logger = logging.getLogger()
logger.setLevel(logging.INFO)

handler = logging.StreamHandler()
handler.setLevel(logging.INFO)

formatter = CustomLoggingFormatter()
handler.setFormatter(formatter)

logger.addHandler(handler)

当我想记录一些东西的时候,这个功能非常好(记录器信息()…),但我对库中的日志有问题,例如uwsgi。在

以下是日志消息的示例:

{"@timestamp": "2017-09-25T06:57:45.373Z", "level": "INFO", "message": " * Running on %s://%s:%d/ %s"}

我认为我的格式化程序可能有问题,但是当我记录我的CustomLoggingFormatter接收到的LogRecord时,上面的行如下所示:

LogRecord: werkzeug, 20, <...>/lib/python3.5/site-packages/werkzeug/_internal.py, 87, " * Running on %s://%s:%d/ %s"

这是我的CustomLoggingFormatter:

^{pr2}$

要使我的格式化程序正常工作,似乎必须首先解析字符串格式,但对于几个库来说,这并没有发生。有谁知道如何解决这个问题?在


Tags: 程序infoflaskonformatterlogging记录logger
1条回答
网友
1楼 · 发布于 2024-10-02 00:39:18

您需要始终调用record.getMessage();它接受record.msg的值并对其应用格式。default implementation of ^{}将结果分配给record.message,以便插入到最后的字符串中。你的代码中也有:

def format(self, record):
    print(record)
    record.message = record.getMessage()
    input_data = {}
    input_data['@timestamp'] = datetime.utcnow().isoformat()[:-3] + 'Z'
    input_data['level'] = record.levelname

    if record.message:
        input_data['message'] = record.message

    input_data.update(self.data)
    return json.dumps(input_data)

相关问题 更多 >

    热门问题