Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义Python日志记录方法_Python_Django_Logstash - Fatal编程技术网

自定义Python日志记录方法

自定义Python日志记录方法,python,django,logstash,Python,Django,Logstash,我想在Django应用程序中使用python logstash,需要传递'extra'字段 我不希望执行并更改所有记录器调用,例如: logger.info('Information blah')tologger.info('Information blah'),extra=extra) 额外的对于每次呼叫都是相同的,并且是必需的。我更愿意覆盖现有的记录器方法,以便只做一次 在Djangosettings.py中的日志处理程序中是否有这样做的方法,或者我如何以及在何处重写记录器方法以始终添加额外

我想在Django应用程序中使用
python logstash
,需要传递'extra'字段

我不希望执行并更改所有记录器调用,例如:

logger.info('Information blah')
to
logger.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'],
    },
...