[英]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.