如何在python app engine中更改日志消息的默认格式?

daz*_*sed 10 python logging google-app-engine

我想在我的请求处理程序的日志消息中默认记录模块和类名.

通常的方法是通过调用来设置自定义格式字符串logging.basicConfig,但这只能调用一次,并且在我的代码运行时已经调用过.

另一种方法是创建一个Handler可以传递新日志的新日志Formatter,但这似乎不对,因为我想使用App Engine已安装的现有日志处理程序.

在python App Engine中将额外信息添加到所有日志消息的正确方法是什么,但是否则使用现有的日志格式和接收器?

unu*_*tbu 15

我通过阅读logging模块来解决这个问题__init__.py.我不知道这是否合适,但似乎有效:

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    )

logging.info('Danger Will Robinson!')
# 03-31 20:00 root         INFO     Danger Will Robinson!
root = logging.getLogger()
hdlr = root.handlers[0]
fmt = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
hdlr.setFormatter(fmt)
logging.info('Danger Will Robinson!')
# root        : INFO     Danger Will Robinson!
Run Code Online (Sandbox Code Playgroud)

  • `logging.basicConfig` 是一个设置根处理程序的便捷函数。如果您没有定义处理程序,则“root.handlers”是一个空列表。因此,尝试访问空列表的第一个元素,例如“root.handlers[0]”,会引发“IndexError”。每当您使用“logging”模块时,您必须调用“logging.basicConfig”或从文件中读取配置(例如“logging.config.fileConfig”)或[自己设置处理程序](http:// stackoverflow.com/a/4139462/190597)。 (2认同)

小智 6

我发现这适用于 Python 3.6,它将为所有后续日志记录调用设置日志记录级别/格式,即使是logging由之前的导入调用的。

logging_level = logging.INFO
logging_fmt = "%(levelname)s:%(name)s:%(message)s"   # the default
try:
    root_logger = logging.getLogger()
    root_logger.setLevel(logging_level)
    root_handler = root_logger.handlers[0]
    root_handler.setFormatter(logging.Formatter(logging_fmt))
except IndexError:
    logging.basicConfig(level=logging_level, format=logging_fmt)
Run Code Online (Sandbox Code Playgroud)