我正在使用python日志记录。
获得logger对象的句柄后,我会执行以下操作来记录
logger.info("this is my log message")
我的要求是:
在上面的自定义日志信息中,我想传递更多参数,如下所示:
custom_name = "DISPLAY"
logger.info("this is my log message", custom_name)
custom_name参数应由日志格式化程序的custom_name
占位符使用,如下所示
formatter = logging.Formatter('%(asctime)s %(custom_name)s:%(name)s %(message)s')
我读过文章,stackoverflow帖子,python日志记录文档。我只能找到如何在格式化程序中创建自定义占位符。 我不知道如何从日志语句本身传递这些自定义占位符值。有人能指出我的资源或让我知道如何实现这个目标吗?
我可以做这样的事情
import logging
CUSTOM_VAR= 'myCustomVarValue'
class ContextFilter(logging.Filter):
def filter(self, record):
record.CUSTOM_VAR= CUSTOM_VAR
return True
FORMAT = '%(CUSTOM_VAR)s %(asctime)s - %(levelname)s - %(message)s'
logging.basicConfig(format=FORMAT, datefmt='%d/%m/%Y %H:%M:%S')
logger = logging.getLogger(__name__)
logger.addFilter(ContextFilter())
logger.info("'this is info message")
以上工作正常。但是,CUSTOM_VAR
是一个静态值。如何从log.info
??
答案 0 :(得分:0)
我能够通过以下方式完成它:
在日志配置代码中,让您的格式化程序声明如下:
formatter = logging.Formatter(
'%(asctime)s %(levelname)s %(name)s,%(traceId)s %(packageName)s %(message)s')
现在在代码中,你有日志语句,有这样的语句写成这样你动态传递额外的参数值:
logger.info("custom log message goes here.....",
extra={'traceId': 'XDDF4543GG', 'packageName': 'myPackage'})
相应的日志条目如下所示:
2017-05-15 17:59:24,101 INFO [my-proj-name,XDDF4543GG] myPackage custom log message goes here.....
另外,如果你没有在log.info中放入所有额外的参数,那么你会得到一条keyError错误信息。