我当前的格式字符串是:
formatter = logging.Formatter('%(asctime)s : %(message)s')
我想添加一个名为app_name的新字段,它在包含此格式化程序的每个脚本中都有不同的值。
import logging
formatter = logging.Formatter('%(asctime)s %(app_name)s : %(message)s')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
但我不确定如何将该app_name
值传递给记录器以插入到格式字符串中。很明显,我可以让它出现在日志消息中,但每次都会传递它,但这很混乱。
我试过:
logging.info('Log message', app_name='myapp')
logging.info('Log message', {'app_name', 'myapp'})
logging.info('Log message', 'myapp')
但没用。
您可以使用LoggerAdapter,这样就不必在每次登录调用时传递额外的信息:
日志(类似)
Filters也可用于添加上下文信息。
生成类似的日志记录。
另一种方法是创建自定义LoggerAdapter。当您无法更改格式,或者您的格式与不发送唯一密钥的代码共享时(在您的情况下为app-name),这一点特别有用:
在您的代码中,您可以像往常一样创建和初始化记录器:
最后,创建包装器适配器以根据需要添加前缀:
输出将如下所示:
您需要将dict作为参数传递给extra才能这样做。
证明:
另外,需要注意的是,如果您尝试在不传递dict的情况下记录消息,那么它将失败。
相关问题 更多 >
编程相关推荐