Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python日志记录器将事情记录两次到控制台_Python_Logging - Fatal编程技术网

Python日志记录器将事情记录两次到控制台

Python日志记录器将事情记录两次到控制台,python,logging,Python,Logging,我正在尝试使用Python组装一个记录器。我在2.6版本中工作,所以我不能使用新的字典样式的方法,而是使用良好的老式配置文件。问题是,stuff向控制台输出了两次,我不明白为什么。以下是我的测试脚本: import logging import logging.config if __name__ == "__main__": logging.config.fileConfig("newSlogger.conf") slogger = logging.getLogger("sl

我正在尝试使用Python组装一个记录器。我在2.6版本中工作,所以我不能使用新的字典样式的方法,而是使用良好的老式配置文件。问题是,stuff向控制台输出了两次,我不明白为什么。以下是我的测试脚本:

import logging
import logging.config

if __name__ == "__main__":
    logging.config.fileConfig("newSlogger.conf")
    slogger = logging.getLogger("sloggerMain")

    slogger.debug("dbg msg")
    slogger.info("herp derp dominae")
这是我的配置文件:

[loggers]
keys=root,sloggerMain,sloggerSecondary

[handlers]
keys=consoleHandler,infoFileHandler,debugFileHandler

[formatters]
keys=consoleFormatter,infoFileFormatter,debugFileFormatter

[logger_root]
handlers=consoleHandler
level=NOTSET

[logger_sloggerMain]
handlers=consoleHandler,infoFileHandler,debugFileHandler
level=DEBUG
qualname=sloggerMain

[logger_sloggerSecondary]
handlers=consoleHandler,infoFileHandler,debugFileHandler
level=DEBUG
qualname=sloggerSecondary

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
format=consoleFormatter
args=(sys.stdout,)

[handler_infoFileHandler]
class=FileHandler
level=INFO
formatter=infoFileFormatter
args=("testlog.log", "w")

[handler_debugFileHandler]
class=FileHandler
level=DEBUG
formatter=debugFileFormatter
args=("testlogdbg.log", "w")

[formatter_consoleFormatter]
format=%(name)s: %(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_infoFileFormatter]
format=%(name)s: %(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_debugFileFormatter]
format=%(name)s: %(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_syslogFormatter]
format=%(name)s: %(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

有什么想法吗?

将非根日志记录器设置为
propagate
为0,以防止消息向上传播到根日志记录器:

[logger_sloggerMain]
handlers=consoleHandler,infoFileHandler,debugFileHandler
level=DEBUG
qualname=sloggerMain
propagate=0
日志记录
模块说:

子日志记录器将消息传播到 与其关联的处理程序 祖先伐木者。正因为如此,它 不需要定义和配置 所有记录器的处理程序 应用程序使用。这就足够了 为顶级应用程序配置处理程序 日志记录程序,并将子日志记录程序创建为 需要

sloggerMain
记录器是
root
记录器的子级。默认情况下,发送到该记录器的消息也会向上传播

您还可以简单地禁用根日志记录来解决此问题:

[logger_root]
handlers=