【问题标题】:logging exception into log file in python将异常记录到python中的日志文件中
【发布时间】:2020-12-09 10:11:46
【问题描述】:

我必须为整个应用程序创建一个单独的日志文件,如果应用程序中的任何模块引发任何异常,异常应该进入 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 子句下的所有模块,而是我想在程序开始时简单地创建一个日志文件,并且随着程序执行和模块引发异常,这些异常应该是写入一个日志文件。

【问题讨论】:

  • 我不太明白,你不需要打开这样的文件来使用记录器模块。您可以先去掉with 部分。
  • 您能澄清一下您的问题吗?代码出了什么问题——有错误吗?你期望什么行为,你会得到什么行为?另请注意,将文件 object 传递给参数文件name 应该告诉您重新阅读logging 文档。

标签: python exception logging


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2020-12-31
    • 2012-10-06
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多