当我告诉它时,如何使用 Django 的记录器来记录回溯?

Posted

技术标签:

【中文标题】当我告诉它时,如何使用 Django 的记录器来记录回溯?【英文标题】:How do I use Django's logger to log a traceback when I tell it to? 【发布时间】:2011-06-17 21:46:34 【问题描述】:
try:
    print blah
except KeyError:
    traceback.print_exc()

我以前是这样调试的。我会打印到控制台。现在,我想记录所有内容而不是打印,因为 Apache 不允许打印。那么,如何记录整个回溯?

【问题讨论】:

【参考方案1】:

你可以使用python的日志机制:

import logging
...

logger = logging.getLogger("blabla")
...

try:
    print blah # You can use logger.debug("blah") instead of print
except KeyError:
    logger.exception("An error occurred")

这将打印堆栈跟踪并将与 apache 一起使用。

【讨论】:

是的,完整的堆栈跟踪。从文档中:“Logger.exception() 创建类似于 Logger.error() 的日志消息。不同之处在于 Logger.exception() 连同它一起转储堆栈跟踪。”。这是文档的链接 - docs.python.org/library/logging.html 日志保存在哪里?您定义了 logger = logging.getLogger('bla'),但这是否保存到特定目录?文件还是数据库? 日志保存到文件中(默认行为)。可以配置日志文件位置:LOG_FILENAME = 'example.log' logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG),可以在文档中找到解释-docs.python.org/library/logging.html#simple-examples @李。有什么方法可以将完整的堆栈放入 python 对象中,比如字符串,而不是登录到文件中? @Lin 在这种情况下,最好在 settings.py 中使用 Django 的 LOGGING 配置,让您的处理程序/记录器决定将日志发送到哪里。【参考方案2】:

如果您正在运行 Django 的主干版本(或发布时的 1.3),则内置了许多默认日志配置,这些配置与 Python 的标准日志模块集成。为此,您需要做的就是import logging,调用logger = logging.getLogger(__name__),然后调用logger.exception(msg),您将获得消息和堆栈跟踪。 Django's logging functionality 和 Python's logger.exception method 的文档将是方便的参考。

如果你不想使用 Python 的日志记录模块,你也可以import sys 和写到sys.stderr 而不是使用打印。在命令行上它会进入屏幕,当在 Apache 下运行时,它会进入你的错误日志。

【讨论】:

以上是关于当我告诉它时,如何使用 Django 的记录器来记录回溯?的主要内容,如果未能解决你的问题,请参考以下文章

我如何告诉 django-admin 使用哪个设置模块?

更新方法不更新rails 4中的记录

如何告诉我的 django 模板静态文件(dajax.core.js)在哪里?

Django websockets 实现

Django:如何通过单击一行来更改页面?

如何在 Django 中用小胡子写一些东西