防止Python记录器打印到控制台

aAn*_*nAa 6 python logging

我对 Python 的日志模块很生气,因为我真的不知道为什么记录器将日志消息打印到控制台(在调试级别,即使我将 FileHandler 设置为 INFO)。日志文件已正确生成。但我不希望控制台上有任何记录器信息。这是我的记录器配置:

template_name = "testing"
fh = logging.FileHandler(filename="testing.log")
fr = logging.Formatter("%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s")
fh.setFormatter(fr)
fh.setLevel(logging.INFO)
logger = logging.getLogger(template_name)
# logger.propagate = False # this helps nothing
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我就好了:)

Dan*_*ley 0

您应该能够添加StreamHandler来处理 stdout 并将处理程序日志级别设置为高于 50 的级别。(标准日志级别为 50 及以下。)

我会如何做的例子...

import logging
import sys

console_log_level = 100

logging.basicConfig(level=logging.INFO,
                    format="%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s",
                    filename="testing.log",
                    filemode="w")
console = logging.StreamHandler(sys.stdout)
console.setLevel(console_log_level)
root_logger = logging.getLogger("")
root_logger.addHandler(console)

logging.debug("debug log message")
logging.info("info log message")
logging.warning("warning log message")
logging.error("error log message")
logging.critical("critical log message")
Run Code Online (Sandbox Code Playgroud)

测试.log的内容...

import logging
import sys

console_log_level = 100

logging.basicConfig(level=logging.INFO,
                    format="%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s",
                    filename="testing.log",
                    filemode="w")
console = logging.StreamHandler(sys.stdout)
console.setLevel(console_log_level)
root_logger = logging.getLogger("")
root_logger.addHandler(console)

logging.debug("debug log message")
logging.info("info log message")
logging.warning("warning log message")
logging.error("error log message")
logging.critical("critical log message")
Run Code Online (Sandbox Code Playgroud)

注意:我拥有该变量的唯一原因console_log_level是因为我从使用的默认函数中提取了大部分代码,该函数将根据参数值设置控制台日志级别。这样,如果我想让脚本“安静”,我可以根据脚本的命令行参数更改日志级别。