我当前的格式字符串是:
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
值传递给 Logger 以插入格式字符串 . 我显然可以让它出现在日志消息中,但每次都传递它,但这很麻烦 .
我试过了:
logging.info('Log message', app_name='myapp')
logging.info('Log message', {'app_name', 'myapp'})
logging.info('Log message', 'myapp')
但没有工作 .
3 回答
您可以使用LoggerAdapter,这样您就不必在每次记录调用时都传递额外的信息:
日志(类似的东西)
Filters也可用于添加上下文信息 .
产生类似的日志记录 .
你需要将dict作为参数传递给extra,以便那样做 .
证明:
另外,作为注释,如果您尝试在不传递dict的情况下记录消息,那么它将失败 .
另一种方法是创建自定义LoggerAdapter . 当您无法更改格式时,或者如果您的格式与不发送唯一键的代码共享(在您的案例中为app_name),这将非常有用:
在您的代码中,您将像往常一样创建并初始化您的 Logger :
最后,您将创建包装器适配器以根据需要添加前缀:
输出看起来像这样: