在记录Formatter Django Python

时间:2017-06-24 22:26:57

标签: python django logging formatter django-logging

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

1 个答案:

答案 0 :(得分:0)

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