日志记录:如何为处理程序设置最大日志级别

时间:2016-03-31 15:08:26

标签: python logging

使用logging库,您可以登录到文件。您必须设置文件处理程序日志级别。任何级别等于或高于指定级别的日志都将记录到文件中。

但是,如果我想将错误和异常记录到文件myapp_errors.log,将信息记录到另一个文件myapp_info.log以及将任何其他日志记录到另一个文件myapp_debug.log,该怎么办?唯一的选择是创建三个记录器吗?

2 个答案:

答案 0 :(得分:5)

您可以向文件处理程序添加过滤器。这样,您可以将特定级别重定向到不同的文件。

import logging

class LevelFilter(logging.Filter):
    def __init__(self, low, high):
        self._low = low
        self._high = high
        logging.Filter.__init__(self)
    def filter(self, record):
        if self._low <= record.levelno <= self._high:
            return True
        return False


logging.basicConfig(level=logging.DEBUG)

log = logging.getLogger('foo')
error_handler = logging.FileHandler('error.log', 'a')
error_handler.addFilter(LevelFilter(40, 40))
warn_handler = logging.FileHandler('warn.log', 'a')
warn_handler.addFilter(LevelFilter(30, 30))
log.addHandler(error_handler)
log.addHandler(warn_handler)

log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')

警告将转到warn.log,错误转到error.log。所有其他级别都不会存储在文件中。

示例:

$ python log.py
DEBUG:foo:debug
INFO:foo:info
WARNING:foo:warn
ERROR:foo:error
$ tail -n +1 *.log
==> error.log <==
error

==> warn.log <==
warn

答案 1 :(得分:1)

你应该看一下python documentation。使用多个记录器似乎是推荐的方式。