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

时间:2019-11-21 15:02:19

标签: python logging

我对使用Python的日志记录模块感到生气,因为我真的再也不知道为什么记录器将日志记录消息输出到控制台(在DEBUG级别上,即使我将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)

如果有人可以帮助我,那会很好:)

1 个答案:

答案 0 :(得分:0)

您应该能够添加StreamHandler来处理stdout并将处理程序日志级别设置为高于50的级别。(Standard log levels等于或低于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")

testing.log的内容...

2019-11-21 12:53:02,426,426 root INFO info log message
2019-11-21 12:53:02,426,426 root WARNING warning log message
2019-11-21 12:53:02,426,426 root ERROR error log message
2019-11-21 12:53:02,426,426 root CRITICAL critical log message

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