仅记录到文件而不是记录屏幕.DEBUG

时间:2019-11-30 20:51:47

标签: python gevent

我有以下脚本,我只希望将“ DEBUG”日志消息记录到文件中,而什么也不记录到屏幕中。

vagrant box add --box-version 8.2.1 laravel/homestead

但是现在,即使是“ INFO”消息也被记录到文件和屏幕上。如何只将“调试”消息记录到文件中,而什么都没有记录在屏幕上?

1 个答案:

答案 0 :(得分:1)

我进行了一些交互式测试,看来app.logger是一个以python文件命名的记录器

print(app.logger.name) # filename

它有一个处理程序

print(app.logger.handlers) # [<StreamHandler <stderr> (NOTSET)>]

级别为logging.NOTSET的处理程序处理所有消息(来自所有日志记录级别)。因此,当您设置app.logger.setLevel(logging.DEBUG)时,所有调试日志和更高级别的日志都将传递给处理程序,并且所有它们都将出现在stderr上。

要在屏幕上完全不记录任何内容,必须手动删除StreamHandler:

app.logger.handlers.pop(0)

并在处理程序上将DEBUG和更高版本记录到文件集记录级别

log_handler.setLevel(logging.DEBUG)

Python日志记录非常复杂。请参阅此logging flow chart,以更好地了解发生了什么:)

编辑:仅记录一个特定级别,您需要自定义过滤器对象:

class LevelFilter:
    def __init__(self, level):
        self._level = level

    def filter(self, log_record):
        return log_record.levelno == self._level

log_handler.setLevel(logging.DEBUG)
log_handler.addFilter(LevelFilter(logging.DEBUG))