首页 > 解决方案 > 将异常记录到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 子句下的所有模块,而是我想简单地在程序开始时创建一个日志文件,并且随着程序执行和模块引发异常,这些异常应该写入一个日志文件。

标签: pythonexceptionlogging

解决方案


我不知道日志模块,但一些谷歌搜索表明日志模块支持将回溯写入日志文件。此外,您的代码似乎无法在我的机器上运行(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

这样做的好处是记录了整个回溯,这通常更有帮助。


推荐阅读