自定义Python日志记录方法

时间:2015-03-31 07:53:30

标签: python django logstash

我想在我的Django应用程序中使用python-logstash并需要传递'额外'字段。 Here are the docs

extra = {"app":"app-live","source":"django_log"}

我不想通过并更改所有记录器调用,例如:

logger.info('Information blah.')logger.info('Information blah.', extra=extra)

extra对于每次通话都是相同的,并且是必需的。我宁愿覆盖现有的记录器方法,以便我可以这样做一次。

有没有办法在Django settings.py中的日志记录处理程序中执行此操作,或者如何覆盖记录器方法以始终添加extra args?

1 个答案:

答案 0 :(得分:0)

您应该可以使用Filter中描述的logging cookbook进行全局操作。

为了简化一些事情,Django提供了CallbackFilter。 您的过滤器功能如下所示:

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'],
    },
...