加入了一个已经有书面记录器的项目。为了便于过滤,有必要在记录器的任何消息之前添加环境值的传输。
我该怎么做?
设置:
APP_ENV = os.getenv("APP_ENV")
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'graypy': {
'level': 'INFO',
'class': 'graypy.GELFHandler',
'host': 'logstash...',
'port': 12222,
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
},
'loggers': {
'django': {
'handlers': ['graypy', 'console'],
'level': 'WARNING'
},
'mts_marketplace': {
'handlers': ['graypy', 'console'],
'level': 'INFO',
'propagate': True,
},
'mts_marketplace.processing': {
'handlers': ['graypy', 'console'],
'level': 'INFO',
'propagate': False,
},
'mts_marketplace.internal_api': {
'handlers': ['graypy', 'console'],
'level': 'INFO',
'propagate': False,
},
'mts_marketplace.trustedgoods': {
'handlers': ['graypy', 'console'],
'level': 'INFO',
'propagate': False,
},
'mts_marketplace.fka': {
'handlers': ['graypy', 'console'],
'level': 'INFO',
'propagate': False,
},
},
}
答案 0 :(得分:0)
Django使用Python的日志记录机制,因此该部分也适用于Django: https://docs.python.org/3/howto/logging-cookbook.html#using-loggeradapters-to-impart-contextual-information
使用LoggerAdapters传递上下文信息
一种简单的方式,您可以传递上下文信息进行输出 连同记录事件信息一起使用LoggerAdapter 类。此类的设计类似于Logger,因此您可以 调用debug(),info(),warning(),error(),exception(),critical()和 log()。这些方法与它们的对应方法具有相同的签名 Logger,因此您可以互换使用两种类型的实例。
或者,如@dirkgroten所建议的:
https://docs.python.org/3/howto/logging-cookbook.html#using-filters-to-impart-contextual-information
使用过滤器传递上下文信息
您还可以使用以下命令将上下文信息添加到日志输出中 用户定义的过滤器。允许过滤器实例修改 传递给他们的LogRecords,包括添加其他属性 然后可以使用适当的格式字符串将其输出,或者在需要时输出 自定义格式化程序。
两个部分均提供示例代码。