我想记录所有警告,假设将captureWarnings设置为True应该可以解决问题。但它并没有。代码:
import logging
import warnings
from logging.handlers import RotatingFileHandler
logger_file_handler = RotatingFileHandler(u'./test.log')
logger_file_handler.setLevel(logging.DEBUG)
logging.captureWarnings(True)
logger = logging.getLogger(__name__)
logger.addHandler(logger_file_handler)
logger.setLevel(logging.DEBUG)
logger.info(u'Test')
warnings.warn(u'Warning test')
我的期望是'警告测试'应该出现在test.log中,但它不仅仅是测试'放在日志文件中。
如何捕获所有警告并将其重定向到日志文件?
Python 2.7.5
答案 0 :(得分:11)
警告模块发出的警告将被重定向到 测井系统。具体来说,将使用格式化警告
warnings.formatwarning()
并将生成的字符串记录到记录器中 名为'py.warnings',严重程度为WARNING 。
你可能想要这样的东西:
import logging
import warnings
from logging.handlers import RotatingFileHandler
logger_file_handler = RotatingFileHandler(u'test.log')
logger_file_handler.setLevel(logging.DEBUG)
logging.captureWarnings(True)
logger = logging.getLogger(__name__)
warnings_logger = logging.getLogger("py.warnings")
logger.addHandler(logger_file_handler)
logger.setLevel(logging.DEBUG)
warnings_logger.addHandler(logger_file_handler)
logger.info(u'Test')
warnings.warn(u'Warning test')
希望它有所帮助!
答案 1 :(得分:1)
logging.captureWarnings
未使用您的记录器。它使用名为'py.warnings'
的记录器。您需要配置该记录器以执行您想要的操作。
答案 2 :(得分:0)
在应用代码库中,您可以-并且可能想要-配置 root py.warnings记录器。 >记录器。这将:
py.warnings
(集成captureWarnings
的记录器)中的内容logging.info
之类的日志记录模块功能进行日志记录,而不是创建记录器对象以下简单的演示记录了您希望的警告:
import logging
import warnings
from logging.handlers import RotatingFileHandler
logger_file_handler = RotatingFileHandler(u'./test.log')
logger_file_handler.setLevel(logging.DEBUG)
logging.captureWarnings(True)
root_logger = logging.getLogger()
root_logger.addHandler(logger_file_handler)
root_logger.setLevel(logging.DEBUG)
logging.info(u'Test')
warnings.warn(u'Warning test')