我打算将日志配置从代码中提取到logging.conf
文件中。但行为似乎彼此不同。
当前简单的硬编码案例是:
import sys
import logging
import logging.handlers
# loggers
root = logging.getLogger()
mylogger = logging.getLogger("mylogger")
# handler
consoleHandler = logging.StreamHandler(sys.stderr)
# formatter
simpleFormatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# config
consoleHandler.setLevel(logging.INFO)
consoleHandler.setFormatter(simpleFormatter)
root.setLevel(logging.INFO)
root.addHandler(consoleHandler)
if __name__ == '__main__':
mylogger.debug("mylogger debug")
mylogger.info("mylogger info")
mylogger.warning("mylogger warning")
mylogger.error("mylogger error")
root.debug("root debug")
root.info("root info")
root.warning("root warning")
root.error("root error")
并且(大概)使用的可比较配置logging.conf
是:
import logging
import logging.config
# loggers
root = logging.getLogger()
mylogger = logging.getLogger("mylogger")
if __name__ == '__main__':
# load configuration from a file
logging.config.fileConfig("logging.conf")
mylogger.debug("mylogger debug")
mylogger.info("mylogger info")
mylogger.warning("mylogger warning")
mylogger.error("mylogger error")
root.debug("root debug")
root.info("root info")
root.warning("root warning")
root.error("root error")
logging.conf
是:
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=INFO
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
args=(sys.stderr,)
level=INFO
formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
前者的输出包括来自的日志mylogger
:
2013-10-19 21:36:05,866 - mylogger - INFO - mylogger info
2013-10-19 21:36:05,866 - mylogger - WARNING - mylogger warning
2013-10-19 21:36:05,866 - mylogger - ERROR - mylogger error
2013-10-19 21:36:05,866 - root - INFO - root info
2013-10-19 21:36:05,866 - root - WARNING - root warning
2013-10-19 21:36:05,866 - root - ERROR - root error
,但后者不包括来自以下的日志mylogger
:
2013-10-19 21:38:39,753 - root - INFO - root info
2013-10-19 21:38:39,753 - root - WARNING - root warning
2013-10-19 21:38:39,753 - root - ERROR - root error
在我的真实项目中,记录器对象出现在许多带有 的文件中logger = logging.getLogger (__name__)
,因此很难列出logging.conf
除“根”记录器之外的所有记录器。
有没有一种好方法来修复后一个示例以获得与前一个案例相同的输出?
谢谢。