如何解决Python日志记录格式化程序子类从config / parent获取格式字符串
我将python3 logging.Formatter
继承了子类,因此我可以打印合并在一起的多个字段。
即输出
2020-09-14 17:05:38,624 users:252 api.users.users INFO A message
2020-09-14 16:53:19,314 order:77 api.order.order INFO Some message to log
2020-09-14 16:53:19,317 invoice:29 api.order.invoice INFO Some other message to log
2020-09-14 16:51:33,109 stock:292 api.stock.stock CRITICAL Logging something bad happening
不是这个
2020-09-14 17:05:38,624 users:252 api.users.users INFO A message
2020-09-14 16:53:19,314 order:77 api.order.order INFO Some message to log
2020-09-14 16:53:19,109 stock:292 api.stock.stock CRITICAL Logging something bad happening
我正在使用dictConfig
初始化所有内容,但是我的自定义记录器需要在其中指定格式字符串(当我将输出传递给父显示时),但是我希望在其中定义它dictConfig
。我的班级(或父班级)是否可以从日志记录模块或dictConfig
获取格式字符串,而不必手动进行操作?
# Dict Config
'formatters': {
'default': {'format': '%(asctime)s %(mod_lineno)15s %(name)-20s %(levelname)-12s %(message)s'},'merge': {'()': 'merge_formatter.MergeFormatter'}
}
# MergeFormatter
from logging import Formatter,LogRecord
class MergeFormatter(Formatter):
def __init__(self,fmt=None,datefmt=None,style='%'):
if fmt is None: # get this line from the formatters (above)
fmt = '%(asctime)s %(module_lineno)15s %(name)-20s %(levelname)-12s %(message)s'
super().__init__(fmt,datefmt,style)
def format(self,record: LogRecord) -> str:
record.module_lineno = '{}:{}'.format(record.module,record.lineno)
return super().format(record)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。