2012-04-08 50 views
1

我想要有一个异常处理机制与几层信息显示给我的应用程序的用户,使用Python的日志记录模块。蟒蛇 - 选择性处理异常追溯

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

有没有可能做到这一点?

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

回答

2

traceback模块可能对您有所帮助。在您的应用程序的最顶层,你应该把包罗万象声明:

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块之外的代码不应该被允许崩溃。

+0

使用此解决方案,回溯打印的是从除外块开始的一个,而不是从异常开始的一个。它并没有真正帮助本地化崩溃的来源。 – 2015-08-14 00:45:41

0

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

在这个函数中,你应该检查哪个模式是在(INFO或DEBUG)上,然后提取关于异常的信息,并在需要时手动将它传给记录器。