python - 自定义回溯输出

标签 python exception logging error-handling traceback

当有未捕获的异常时,我使用此代码写入.log文件:

import sys
import traceback

def uncaught_exc_handler(ex_cls, ex, tb):
   with open('mylog.log', 'w') as f: 
      traceback.print_last(file=f)

sys.excepthook = uncaught_exc_handler

1/0

输出的示例:
Traceback (most recent call last):
  File "C:\Users\Abc\Desktop\test.py", line 11, in <module>
    1/0
ZeroDivisionError: integer division or modulo by zero

如何自定义日志记录并改为使用它:
ERROR 11 (test): ZeroDivisionError: integer division or modulo by zero



(注意:11是发生错误的行号,test是当前文件)

PS:我考虑过解析这4行,在第二行中搜索“line”,提取附近的int,等等。但这是一个相当肮脏的方法,我想这将无法正常运行

最佳答案

我相信这可以满足您的需求:

import sys
import traceback

def uncaught_exc_handler(ex_cls, ex, tb):
    last_traceback = (traceback.extract_tb(tb))[-1]
    line_number = last_traceback[1]
    file_name = last_traceback[0].split(".")[0]
    class_name = ex_cls.__name__
    with open('mylog.log', 'w') as f: 
        f.write("ERROR %s (%s) %s: %s\n" % (line_number, file_name, class_name, str(ex)))

sys.excepthook = uncaught_exc_handler


1/0

这将导致包含以下行的文件(mylog.log):
ERROR 15 (test) ZeroDivisionError: integer division or modulo by zero

关于python - 自定义回溯输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338300/

相关文章:

python - 从 python 控制台应用程序到 django 作为 UI 最佳实践

exception - 黑莓中的 FileIOException

java - 在 REST API 中使用受检异常与未受检异常

c# - 使用 log4net 在运行时读取并记录 HttpSession 数据

python - 为什么所有模块一起运行?

python - 变量数据类型错误?

python - 如何在公式中使用 tensorflow 张量值?

java - Android SQLite 如何获取特定列 :row value

logging - '/var/log/secure.log' 在 Mountain Lion 中的位置

java - Log4j 日志配置