0

让以下成为 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中,或者默认情况下它应该记录None

4

1 回答 1

0

这通常是通过定义一个自定义格式化程序并通过访问当前请求将您的数据(在您的情况下为 ID)注入日志格式。

于 2017-06-25T07:21:58.383 回答