python - 将异常记录到python中的日志文件中
问题描述
我必须为整个应用程序创建一个单独的日志文件,如果应用程序中的任何模块引发任何异常,异常应该进入 except 块并且错误应该写入日志文件。如果多个模块引发异常,则不应覆盖此日志文件,所有异常都应记录到一个日志文件中。
我已经尝试使用以下代码记录器,但它没有创建日志文件:
import logging
with open("D:\logfile\log.txt", "w") as log:
logging.basicConfig(filename=log, level=logging.DEBUG, format='%(asctime)s %(levelname)s %(name)s %(message)s')
logger=logging.getLogger(__name__)
try:
1/0
except ZeroDivisionError as err
logger.error(err)
也使用 with 子句需要缩进,我不想使用一个 with 子句下的所有模块,而是我想简单地在程序开始时创建一个日志文件,并且随着程序执行和模块引发异常,这些异常应该写入一个日志文件。
解决方案
我不知道日志模块,但一些谷歌搜索表明日志模块支持将回溯写入日志文件。此外,您的代码似乎无法在我的机器上运行(Python v3.8.5),因此我对其进行了编辑,使其可以正常工作。
logging.exception('text')
将回溯记录到日志文件,您可以指定将预先显示的消息。
编码:
import logging
#with open("log.txt", "w") as log:
logging.basicConfig(filename='log.txt', level=logging.DEBUG, format='%(asctime)s %(levelname)s %(name)s %(message)s')
logger=logging.getLogger(__name__)
try:
1/0
except ZeroDivisionError:
logging.exception('Oh no! Error. Here is the traceback info:')
日志文件:
2020-08-20 08:31:02,310 ERROR root Oh no! Error. Here is the traceback info:
Traceback (most recent call last):
File "logger.py", line 7, in <module>
1/0
ZeroDivisionError: division by zero
这样做的好处是记录了整个回溯,这通常更有帮助。
推荐阅读
- c++ - 如何将 C 风格的编译时数组转换为 std::array
- arrays - 打字稿减少对象数组和增加属性
- php - 如何更新已经存在的文件
- facebook - Facebook 永久用户访问令牌
- python - 在 PyQt5 中从字节显示 GIF
- angular - 失败:模板解析错误:无法绑定到“ngModel”,因为它不是“输入”的已知属性。("*
- python - 从 AF 列及以后的 excel 中读取
- docker - 如何在 docker cli 上运行的命令行中运行命令
- mysql - 将多行合并为一行,并将分组记录作为新列
- javascript - PHP里面的Javascript If函数?