如何将自定义字段添加到Python日志格式字符串?

我当前的格式字符串是:

formatter=logging.formatter('%(asctime)s:%(message)s')

我想添加一个名为app\u name的新字段,它在包含此格式化程序的每个脚本中都有不同的值

导入日志记录
格式化程序=日志记录。格式化程序(’%(asctime)s%(应用程序名称)s:%(消息)s’)
syslog.setFormatter(格式化程序)
logger.addHandler(syslog)

但我不知道如何将app\u name值传递给记录器,以插入格式字符串。通过每次传递它,我显然可以让它出现在日志消息中,但这很混乱

我试过:

logging.info('Log message',app\u name='myapp')
logging.info('Log message',{'app_name','myapp'})
logging.info('日志消息','我的应用')

但都不管用

您可以使用LoggerAdapter,这样就不必在每次日志调用中传递额外的信息:

导入日志记录
额外={‘app_name’:’Super app’}
logger=logging.getLogger(_名称__)
syslog=logging.StreamHandler()
格式化程序=日志记录。格式化程序(’%(asctime)s%(应用程序名称)s:%(消息)s’)
syslog.setFormatter(格式化程序)
logger.setLevel(logging.INFO)
logger.addHandler(syslog)
logger=logging.LoggerAdapter(记录器,额外)
logger.info(’天空是如此的蓝’)

日志(类似于)

2013-07-09 17:39:33596超级应用:天空是如此的蓝

过滤器也可用于添加上下文信息

导入日志记录
类AppFilter(logging.Filter):
def过滤器(自我,记录):
record.app_name=’Super app’
返回真值
logger=logging.getLogger(_名称__)
logger.addFilter(AppFilter())
syslog=logging.StreamHandler()
格式化程序=日志记录。格式化程序(’%(asctime)s%(应用程序名称)s:%(消息)s’)
syslog.setFormatter(格式化程序)
logger.setLevel(logging.INFO)
logger.addHandler(syslog)
logger.info(’天空是如此的蓝’)

生成类似的日志记录

发表评论