python - 异常回溯的选择性处理

时间:2012-04-08 06:24:11

标签: python logging exception-handling error-logging

我正在尝试使用python的日志记录模块,为我的应用程序显示一个包含多层信息的异常处理机制。

在应用程序中,日志记录模块有2个处理程序:用于保存DEBUG信息的文件处理程序和用于保留INFO信息的流处理程序。默认情况下,日志记录级别设置为INFO。我想要实现的是一种设置,如果发生任何异常,用户会在没有任何回溯的情况下显示简单的错误消息。如果日志记录级别设置为DEBUG,则用户仍应获取简单消息 ,但这次异常回溯通过文件处理程序记录到日志文件中。

有可能实现这个目标吗?

我尝试使用logger.exception(e),但它总是将回溯打印到控制台上。

2 个答案:

答案 0 :(得分:2)

traceback模块可以帮助您。在应用程序的顶层,你应该发出一个catch all语句:

setup_log_and_other_basic_services()
try:
    run_your_app()
except Exception as e:
    if is_debug():
        traceback.print_stack()
    else:
        traceback.print_stack(get_log_file())
    print e

不应允许try / catch块之外的代码崩溃。

答案 1 :(得分:0)

编写自定义异常处理函数,并在每次编写catch时使用它。

在此功能中,您应该检查哪个模式(INFO或DEBUG),然后提取有关异常的信息并在需要时手动将其提供给记录器。