0
所以我想在我的Python程序中实现日志记录。目标是设置它以便创建一个日志文件,并且记录程序通过它的各个模块执行的所有事情(根据日志记录级别)。这是我当前的代码是什么样子: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()
目前,当我运行时,所有的日志消息当前都在使用IDLE3 shell显示和日志文件正在创建。但是在日志文件本身中,正在记录的唯一消息是来自__init__.py
的“调试测试”。在test.py
模块中没有任何消息正在记录在日志文件中。
我的问题是什么?
解决方案是将'logger = logging.getLogger(__ name __)'行移动到'testLog()'方法的内部?这就是说,这意味着我使用的每个模块中的每个方法都应该通过创建一个存在于该方法范围内的日志记录对象来启动该方法? – Skitzafreak
没有,因为你得到一个记录器对象的功能之外没有帮助。在导入测试之前,''__init __。py''中的''fileConfig'调用将移到顶层,这是加载软件包时首先要执行的操作 –
Ahh好的。因此,导入日志记录库,实现日志记录的东西,导入和运行其他的东西。 Gotcha – Skitzafreak