通过Python日志记录模块将意外错误记录到文件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Python日志记录模块将意外错误记录到文件中相关的知识,希望对你有一定的参考价值。
我已经搜索互联网,Python的官方文档和StackOverflow已有相当一段时间了,但是似乎找不到合适的答案。
我正在遵循Python的官方HOWTO日志记录-我的记录器如下所示:
import os, logging
os.chdir("C:/Users/kerfuffle/Desktop/logtest")
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("logging.log")
fh.setLevel(logging.INFO)
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(sh)
logger.debug("debug!")
logger.info("info!")
logger.warning("warning!")
代码的最后3行工作正常,我们还通过StreamHandler获得了正确的输出。
logging.log-文件:
2020-05-27 15:41:59,586 - INFO - info!
2020-05-27 15:41:59,586 - WARNING - warning!
控制台输出:
2020-05-27 15:41:59,584 - DEBUG - debug!
2020-05-27 15:41:59,586 - INFO - info!
2020-05-27 15:41:59,586 - WARNING - warning!
现在我不明白的是:如果我故意创建一个错误,我希望它会记录到文件中。因此,我在脚本中添加了未知变量“ var”:
var += 1
我将在控制台中在StreamHandler()日志旁边收到标准错误输出,如上所示:
2020-05-27 15:45:37,444 - DEBUG - debug!
2020-05-27 15:45:37,445 - INFO - info!
2020-05-27 15:45:37,451 - WARNING - warning!
Traceback (most recent call last):
File "c:/Users/kerfuffle/Desktop/logtest/file.py", line 23, in <module>
var += 1
NameError: name 'var' is not defined
我的日志文件仅显示:
2020-05-27 15:45:37,445 - INFO - info!
2020-05-27 15:45:37,445 - WARNING - warning!
我从教程中知道,我可以尝试通过以下方式转义所有内容:
try:
var += 1
except Exception:
logger.exception("You moron! Don't do that") #or
logger.error('What a stupid error!')
但是,如何捕获用户无法预测或主要不期望的错误并将其写入日志文件? (=>请勿尝试/除外)
您有时甚至在错误发生之前都不知道。例如,当我通过cronjob运行脚本时。
谢谢您的答复! :-)
答案
我相信您正在寻找以下标志:exc_info
try:
var += 1
except Exception as e:
logging.critical(e, exc_info=True)
这将捕获生成的错误消息,并将其传播到日志记录。另请参见https://stackoverflow.com/a/29556251/8140659
以上是关于通过Python日志记录模块将意外错误记录到文件中的主要内容,如果未能解决你的问题,请参考以下文章