0

我在我的 settings.py 中编写了一个简单的 django LOGGING 并且我除了在我的文件中使用回溯记录所有错误。但它没有,它只是在一行中记录错误和所有内容,但回溯记录到控制台中。这是我的日志:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
            'simple': {
                'format': '{levelname} {asctime} {name} {module}.{funcName}:{lineno} {message}',
                'style': '{',
            },
        },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logs/debug.log',
            'formatter': 'simple'
        },
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
}

谁能帮我理解为什么和做什么?谢谢。

4

2 回答 2

0

您使用的格式化程序是“简单的”(在配置中定义:

 'formatters': {
        'simple': {
            'format': '{levelname} {asctime} {name} {module}.{funcName}:{lineno} {message}',
            'style': '{',
        },
    },

所以玩这个是诀窍:看看这个:https ://docs.python.org/3/library/logging.html#logrecord-attributes

您可能想要的是:{stack_info}

于 2018-10-11T11:29:32.367 回答
0

为此,您可以添加自定义格式,然后为其编写自定义过滤器以填充其值:

'formatters': {

    'simple_trace': {
        'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(trace)s'
    },

现在,CustomFilter 应该从 logging.Filter 继承,例如:

class CustomFilter(logging.Filter):

    def filter(self, log_record):

        def _get_trace():
            trace = ""
            if log_record.levelname in ['ERROR', 'CRITICAL']:
                # Get the recent stack-trace
                trace = traceback.format_exc().strip()
            return json.dumps(trace)

        log_record.trace = _get_trace()

像这样你也可以添加其他格式,只需在 log_record 中添加它的值。

最后,我们需要继承处理程序(在您的情况下为 logging.FileHandler )并将此自定义过滤器添加到其中。

class CustomHandler(logging.FileHandler):    

    def __init__(self, *args, **kwargs):
        logging.FileHandler.__init__(self, *args, **kwargs)
        self.addFilter(CustomFilter())

在设置处理程序时,我们需要将 CustomHandler 放入类中:

'handlers': {
    'file': {
        'level': 'DEBUG',
        'class': 'logging_custom.CustomHandler', # path to CustomHandler defination
        'filename': 'logs/debug.log',
        'formatter': 'simple_trace'
    },
},
于 2018-10-24T09:16:27.750 回答