Python日志 - 默认值到额外参数

8

我希望将默认值设置为额外参数user_id。我已经编写了过滤器:

class SystemLogFilter(logging.Filter):
    def filter(self, record):
        if not record.user_id:
            record.user_id = '--'

        return True

但是我遇到了这个错误:AttributeError: 'LogRecord' object has no attribute 'user_id'

如何访问user_id参数?

这是我的日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'system_log': {
            'format': '%(asctime)-15s - %(levelname)s - %(message)s - %(user_id)s'
        },
    },
    'filters': {
        'system2': {
            '()': 'system.logging2.SystemLogFilter',
        }
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': (os.path.join(BASE_DIR, 'logs/system.log')),
            'formatter': 'system_log',
            'filters': ['system2'],
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'propagate': True,
            'level': 'INFO',
         },
    }
}

1
我已经为此编写了一个小型库:https://github.com/svisser/logaugment - Simeon Visser
1个回答

17
你可以使用内置函数hasattr来检查日志记录是否具有所需的属性。如果没有,则可以设置一个默认值。
例如:
class SystemLogFilter(logging.Filter):
    def filter(self, record):
        if not hasattr(record, 'user_id'):
            record.user_id = '--'
        return True

接下来,您需要将此新过滤器附加到应用程序中的某个记录器(例如root记录器),最好在应用程序启动时执行:

root_logger = logging.getLogger()
root_logger.addFilter(SystemLogFilter())

1
嗨,兄弟,这个类应该写在哪里? - vijin selvaraj
@vijinselvaraj 我已经添加了一个例子。 - Elijas Dapšauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接