简体   繁体   English

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

[英]Logging: how to set a maximum log level for a handler

With logging library you can log to file. 使用logging库,您可以登录到文件。 You have to set the file handler log level. 您必须设置文件处理程序日志级别。 Any log with level equal or higher than the specified level will be logged to file. 任何级别等于或高于指定级别的日志都将记录到文件中。

But what if I want to log errors and exceptions to a file myapp_errors.log, infos to another file myapp_info.log and any other log to another file myapp_debug.log? 但是,如果我想将错误和异常记录到文件myapp_errors.log,将信息记录到另一个文件myapp_info.log以及任何其他记录到另一个文件myapp_debug.log,该怎么办? The only option is to create three loggers? 唯一的选择是创建三个记录器?

You can add filters to filehandlers. 您可以向文件处理程序添加过滤器。 This way you can redirect specific levels to different files. 这样,您可以将特定级别重定向到不同的文件。

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')

Warnings will go to warn.log, errors to error.log. 警告将发送到warn.log,错误发送到error.log。 All other levels will not be stored in a file. 所有其他级别都不会存储在文件中。

Example: 例:

$ 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

You should take a look at the python documentation . 你应该看一下python文档 Using multiple logger seems to be the recommended way. 使用多个记录器似乎是推荐的方式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM