Python日志模块即使propagate=False,仍会输出到控制台

8

我正在尝试使用logging模块打印到文件中。功能正常,我的日志文件已经有了日志,但它也会将这些日志显示在控制台窗口中,我不想发生这种情况。我尝试了以下方法:

logger = logging.getLogger('log')

hdlr = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=200000, backupCount=3)

formatter = logging.Formatter('%(asctime)s -- %(levelname)s -- \n%(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO)
logger.propagate = False

即使如此,它仍然会打印到控制台。有任何想法是为什么?

你使用什么日志函数来记录日志?logger.log - falsetru
我使用 logger.exception(msg) 或者 error / info。 - buddy123
1个回答

9

很可能您在某个地方调用了logging.basicConfig(),或者调用了logging.info()或类似的函数(调用模块级别函数而非记录器方法)。

这些模块级别的函数是为简单使用而设计的,如果根记录器没有指定处理程序,它们会创建并添加一个控制台处理程序。因此,请确保您没有调用logging.debug(...)风格的函数,并且您没有调用可能更改日志记录配置的basicConfig()或其他日志记录配置函数。


我已经创建了我的类的另一个版本,使用basicConfig,现在它确实可以工作了。谢谢。 - buddy123
为什么你需要调用basicConfig函数? - Fermi-4
@Fermi-4 你不需要这样做。它用于为根记录器添加处理程序,如果它没有任何处理程序的话。 - Vinay Sajip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接