【问题标题】:python logging - default value to extra parameterspython logging - 额外参数的默认值
【发布时间】:2015-02-24 08:33:37
【问题描述】:

我想将默认值设置为额外参数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',
         },
    }
}

【问题讨论】:

标签: python django logging


【解决方案1】:

您可以使用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())

【讨论】:

  • 大哥这门课哪里写
  • @vijinselvaraj 我添加了一个例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 2015-06-02
  • 2015-02-19
相关资源
最近更新 更多