Python/Django:在 runserver 下登录到控制台,在 Apache 下登录到文件
当我在 manage.py runserver
下运行 Django 应用程序时,如何将跟踪消息发送到控制台(如 print
),但将这些消息发送到日志文件当我在 Apache 下运行应用程序时?
我回顾了 Django 日志记录,尽管它的灵活性和高级可配置性给我留下了深刻的印象使用,我仍然对如何处理我的简单用例感到困惑。
How can I send trace messages to the console (like print
) when I'm running my Django app under manage.py runserver
, but have those messages sent to a log file when I'm running the app under Apache?
I reviewed Django logging and although I was impressed with its flexibility and configurability for advanced uses, I'm still stumped with how to handle my simple use-case.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以在
settings.py
文件中配置日志记录。一个例子:
然而,这取决于设置 DEBUG,也许您不想担心它是如何设置的。请参阅 如何判断我的 Django 应用程序是否在开发服务器上运行? 以更好的方式编写该条件。编辑:上面的示例来自 Django 1.1 项目,自该版本以来,Django 中的日志配置发生了一些变化。
You can configure logging in your
settings.py
file.One example:
However that's dependent upon setting DEBUG, and maybe you don't want to have to worry about how it's set up. See this answer on How can I tell whether my Django application is running on development server or not? for a better way of writing that conditional. Edit: the example above is from a Django 1.1 project, logging configuration in Django has changed somewhat since that version.
我用这个:
logging.conf:
testapp.py:
I use this:
logging.conf:
testapp.py:
您可以使用
tagalog
(https://github.com/dorkitude/tagalog) 轻松完成此操作。例如,当标准 python 模块写入以附加模式打开的文件对象时,App Engine 模块(https://github.com/dorkitude/tagalog/blob/master/tagalog_appengine.py) 会覆盖此行为并改为使用
logging.INFO
。要在 App Engine 项目中获得这种行为,只需执行以下操作:
您可以自己扩展模块并覆盖日志函数,而不会有太大困难。
You can do this pretty easily with
tagalog
(https://github.com/dorkitude/tagalog)For instance, while the standard python module writes to a file object opened in append mode, the App Engine module (https://github.com/dorkitude/tagalog/blob/master/tagalog_appengine.py) overrides this behavior and instead uses
logging.INFO
.To get this behavior in an App Engine project, one could simply do:
You could extend the module yourself and overwrite the log function without much difficulty.
这在我的 local.py 中效果很好,避免了我搞乱常规日志记录:
This works quite well in my local.py, saves me messing up the regular logging:
这是一个基于 Django 日志记录的解决方案。它使用 DEBUG 设置而不是实际检查您是否正在运行开发服务器,但如果您找到更好的方法来检查它应该很容易适应。
请参阅https://docs.djangoproject.com/en/dev/topics/logging/< /a> 了解详细信息。
Here's a Django logging-based solution. It uses the DEBUG setting rather than actually checking whether or not you're running the development server, but if you find a better way to check for that it should be easy to adapt.
see https://docs.djangoproject.com/en/dev/topics/logging/ for details.
在 mod_wsgi 下运行时,打印到 stderr 的文本将显示在 httpd 的错误日志中。您可以直接使用
print
,也可以使用logging
。Python 3:
Python 2:
Text printed to stderr will show up in httpd's error log when running under mod_wsgi. You can either use
print
directly, or uselogging
instead.python 3:
python 2: