我想在我的请求处理程序的日志消息中默认记录模块和类名。
通常的方法是通过调用logging.basicConfig
来设置自定义格式字符串,但这只能调用一次,并且在代码运行时已经调用过。
另一种方法是创建一个可以传递新日志Handler
的新日志Formatter
,但这似乎不对,因为我想使用App Engine安装的现有日志处理程序
在python App Engine中为所有日志消息添加额外信息的正确方法是什么,但是否则使用现有的日志格式和接收器?
答案 0 :(得分:14)
我通过阅读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!
答案 1 :(得分:2)
我发现这适用于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)