繁体   English   中英

Django中的python登录

[英]python logging in django

我在django中使用基本的python记录器,似乎工作得很好。 我在我的setting.py中有日志记录设置;

logging.baseConfig(level = logging.NOTSET,    
                   format='a format',    
                   datemt=' a datefmt',    
                   filename='path to log',    
                   filemode = 'a')    
logging.getLogger('').setLevel(logging.NOTSET)    

我的问题是关于传播例外。 在我的代码中,如果我有一个try / except子句并捕获异常,以便可以对其进行日志记录,那么传播该错误以便重定向到我的500页的最佳方法是什么。 我一直在用

try:
    do stuff
except Exception, e:
    logging.error(e)
    raise

但是我发现这导致该异常记录两次。 还有另一种方法可以执行此操作,还是我做错了什么?

问候
安德鲁

有没有需要捕获异常所以您可以登录它。 您可以记录并处理它,或者让它冒泡到更高的水平,它将记录并处理它。 如果您想记录某些视图中不想处理的异常 ,则可以安装一些异常中间件 ,该中间件记录异常并返回您确定的自定义响应,或者返回None (返回Django响应的任何响应)通常会返回)。

有可扩展的异常中间件的例子在这里 ,它实际上并没有使用记录,但其log_exception()方法,你可以继承来记录异常,或只使用该代码段为指导,以提供自己的异常中间件-它基本上只是一个类使用一个名为process_exception的方法:

class MyExceptionMiddleware:

    def process_exception(self, request, exception):
        #Do your logging here

另外,请注意,记录器具有exception()方法,该方法的作用类似于error()但在日志中包含回溯信息。

有一个食谱: http : //code.activestate.com/recipes/466332/

在任何复杂的应用程序中,您可能希望记录并处理大多数异常。 配方显示了一种将日志记录与处理分开的方法,因此不必在每个try-except子句中显式调用日志记录机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM