所以我试图在我的Python程序中实现日志记录。目标是设置它以便创建日志文件并且程序通过它执行的所有操作都记录了各种模块(基于日志记录级别)。这就是我目前的代码:
日志配置的文本文件:
#logging.conf
[loggers]
keys=root,MainLogger
[handlers]
keys=consoleHandler
[formatters]
keys=consoleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_MainLogger]
level=DEBUG
handlers=consoleHandler
qualname=MainLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)
[formatter_consoleFormatter]
format=%(asctime)s | %(levelname)-8s | %(filename)s-%(funcName)s-%lineno)04d | %(message)s
测试日志的外部模块:
#test.py
import logging
logger = logging.getLogger(__name__)
def testLog():
logger.debug("Debug Test")
logger.info("Info Test")
logger.warning("Warning Test")
logger.error("Error Test")
主档案:
#__init__.py
import logging
import logging.config
from datetime import datetime
logging.config.fileConfig('logging.conf', disable_existing_loggers = False)
logger = logging.getLogger('MainLogger')
fileHandler = logging.FileHandler('{:%Y-%m-%d}.log'.format(datetime.now()))
formatter = logging.Formatter('%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s')
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
if __name__ == "__main__":
import test
logger.debug("Debug Test")
test.testLog()
目前,当我运行__init__.py
并且正在创建日志文件时,当前正在显示所有日志消息和IDLE3 shell。但是在日志文件本身中,唯一正在记录的消息是" Debug Test"来自__init__.py
。来自test.py
模块的消息都没有记录在日志文件中。
我的问题是什么?
答案 0 :(得分:0)
在test.py
中,它会在您logger
中稍后配置之前抓取__init__.py
个对象。确保在抓取任何记录器实例之前先配置记录模块。