django日志记录,如何不将错误消息重复到不同的处理程序?

时间:2013-11-14 12:33:19

标签: python django python-2.7

我正在尝试将ERROR / CRITICAL仅重定向到file1,并将DEBUG重定向到file2

我正在尝试以下方法。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(module)s %(message)s'
        },
        'simple' : {
            'format': '%(levelname)s %(message)s'
        }
    },
    'handlers': {
        'fDebugHandler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file1.log'
        },

        'fErrorHandler': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file2.log'
        },
    },

    'loggers': {
        'vpe_default': {
            'handlers': ['fDebugHandler', 'fErrorHandler'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

这里的问题是file1中的所有调试信息,也出现在file2中。由于记录器级别,这是显而易见的。

是否有任何方法可以获得仅 DEBUG 或仅 ERROR 等功能。 DEBUG

1 个答案:

答案 0 :(得分:0)

您可以自己编写filters(来自python docs的更多信息)。

从文档中,您可以执行以下操作:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(module)s %(message)s'
        },
        'simple' : {
            'format': '%(levelname)s %(message)s'
        }
    },
    'filters': {
        'excludedebugmsgs': {
            '()': 'yourproject.logging.ExcludeDebug',
        }
    },
    'handlers': {
        'fDebugHandler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file1.log'
        },

        'fErrorHandler': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'formatter': 'verbose',
            'filename': 'file2.log',
            'filters': ['excludedebugmsgs']
        },
    },

    'loggers': {
        'vpe_default': {
            'handlers': ['fDebugHandler', 'fErrorHandler'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

然后您需要根据python docs

撰写yourproject.logging.ExcludeDebug

Django文档中有一些examples