自定义Python日志记录方法
我想在Django应用程序中使用自定义Python日志记录方法,python,django,logstash,Python,Django,Logstash,我想在Django应用程序中使用python logstash,需要传递'extra'字段 我不希望执行并更改所有记录器调用,例如: logger.info('Information blah')tologger.info('Information blah'),extra=extra) 额外的对于每次呼叫都是相同的,并且是必需的。我更愿意覆盖现有的记录器方法,以便只做一次 在Djangosettings.py中的日志处理程序中是否有这样做的方法,或者我如何以及在何处重写记录器方法以始终添加额外
python logstash
,需要传递'extra'字段
我不希望执行并更改所有记录器调用,例如:
logger.info('Information blah')
tologger.info('Information blah'),extra=extra)
额外的
对于每次呼叫都是相同的,并且是必需的。我更愿意覆盖现有的记录器方法,以便只做一次
在Django
settings.py中的日志处理程序中是否有这样做的方法,或者我如何以及在何处重写记录器方法以始终添加额外的
args?您应该能够使用
为了简化一些事情,Django提供了一个。
您的筛选函数如下所示:
def logstash_filter(record):
record.app = 'app-live'
record.source = 'django_log'
return True
您的日志配置是这样的
...
'filters': {
'add_logstash_info': {
'()': 'django.utils.log.CallbackFilter',
'callback': logstash_filter,
}
},
'handlers': {
'logstash': {
...
'filters': ['add_logstash_info'],
},
...
使用普通函数,您可以使用functools.partial
冻结调用的一部分,但如果logger是一个类,那么这对方法不起作用。谢谢@daniel,额外的
数据不会显示在logstash中。我需要从筛选器返回记录吗?@greenafrican该示例有点通用,在您的示例中,筛选器应该应用于logstash处理程序。还要注意,我的筛选方法中缺少return语句
...
'filters': {
'add_logstash_info': {
'()': 'django.utils.log.CallbackFilter',
'callback': logstash_filter,
}
},
'handlers': {
'logstash': {
...
'filters': ['add_logstash_info'],
},
...