让以下为settings.py`
中的日志格式化程序LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %thread)d %(message)s'
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
},
'myproject.custom': {
'handlers': ['console'],
'level': 'INFO',
'propagate': False,
}
}
}
现在说我有三个文件,即A.py,B.py& C.py
在A.py我有一个装饰者
def myDecorator():
#Code to generate unique Id for each request in Django APP
uniqueId = #something
在B.py& C.py我有很多功能来处理各种请求
import A.py import myDecorator
import logging
@myDecorator
def func1():
#Some Code
logger.debug("Logger message")
@myDecorator
def func2():
#Some Code
logger.info("Logger message")
@myDecorator
def func3():
#Some Code
logger.debug("Logger message")
def func4():
#May be Some functions without logger too !!!!
logger.debug("Logger message")
现在我想记录生成的唯一ID以及记录器消息,而不是每次都在记录器和记录器中显式传递。我也想让它变得通用!
无论如何,我都可以将这些唯一ID传递给记录器,而不会明确地传递它。
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d
%thread)d %(message)s''%(unique_id)s'
},
},
每当记录器被触发时,它应该从装饰器中获取相应的ID。将其记录在%(unique_id)s 中,或者默认情况下应记录无
答案 0 :(得分:0)
通常这样做的方法是定义一个自定义格式化程序,并通过访问当前请求将您的数据(在您的情况下为ID)注入日志格式。