python中logging.getLogger与配置文件中到loggers有和关联关系吗?
import logging, logging.config
logging.config.fileConfig("JobsProject/log4p.conf")
logger = logging.getLogger("main")
logger.debug("test")
exit()
#################以下是配置内容,问题在于,为何上面一行输出会打印两条记录?
[formatters]
keys=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
[handlers]
keys=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[loggers]
keys=root,main
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_main]
level=DEBUG
handlers=consoleHandler
qualname=main
[解决办法]
一行是main logger的,一行是root logger的。没有特别指定的情况下,子logger log的内容会再传给父logger处理。
在log4p.conf中的logger_main这一节中加上:
propagate=0
main处理的内容不会再给root logger,就不会有两行输出了。
[解决办法]
目的不清楚(好像也没看到有人问,自然也没人解释),大概来说查找单独一个模块/功能相关的问题,可以检查相关的log,检查模块间交互过程中的问题,则可能需要检查多个log,父logger的作用就是把多个子log的内容合并。
python logging中,root是所有的logger的祖先。
[解决办法]
可以有多级,具体看文档。