Django 设置默认日志记录
我似乎不知道如何为我的 Django 安装设置“默认”记录器。我想在 settings.py
中使用 Django 1.3 的新 LOGGING
设置。
我看过 Django Logging Doc 的示例,但它看起来对我来说,他们只设置处理程序来为特定的记录器进行日志记录。在他们的示例中,他们为名为“django”、“django.request”和“myproject.custom”的记录器设置了处理程序。
我想要做的就是设置一个默认的logging.handlers.RotatingFileHandler,它将默认处理所有记录器。即,如果我在项目中的某个位置创建一个新模块,并且用类似以下内容表示:my_app_name.my_new_module
,我应该能够执行此操作并将所有日志记录转到旋转文件日志。
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
I can't seem to figure out how to setup a "default" logger for my Django installation. I would like to use Django 1.3's new LOGGING
setting in settings.py
.
I've looked at the Django Logging Doc's example, but it looks to me like they only setup handlers which will do logging for particular loggers. In the case of their example they setup handler for the loggers named 'django','django.request', and 'myproject.custom'.
All I want to do is setup a default logging.handlers.RotatingFileHandler
which will handle all loggers by default. i.e., if I make a new module somewhere in my project and it is denoted by something like: my_app_name.my_new_module
, I should be able to do this and have all logging goto the rotating file logs.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
弄清楚了...
您通过使用空字符串引用“catch all”记录器来设置它:
''
。例如,在以下设置中,我将所有日志事件保存到
logs/mylog.log
中,但django.request
日志事件将被保存到logs/django_request.log
。由于我的django.request
记录器的'propagate'
设置为False
,因此日志事件永远不会到达“catch all”记录器。Figured it out...
You set the 'catch all' logger by referencing it with the empty string:
''
.As an example, in the following setup I have the all log events getting saved to
logs/mylog.log
, with the exception ofdjango.request
log events which will be saved tologs/django_request.log
. Because'propagate'
is set toFalse
for mydjango.request
logger, the log event will never reach the the 'catch all' logger.正如您在您的答案中所说,克里斯,定义默认记录器的一种选择是使用空字符串作为其键。
但是,我认为预期的方法是在日志记录配置字典的
root
键下定义一个特殊的记录器。我在 Python 文档 中找到了这一点:以下是将您的答案中的配置更改为使用
root
键:公平地说,我看不出两种配置之间的行为有任何差异。看来使用空字符串键定义记录器将修改根记录器,因为
logging.getLogger('')
将返回根记录器。我更喜欢
'root'
而不是''
的唯一原因是它对于修改根记录器是明确的。如果您好奇,如果您定义了两者,'root'
会覆盖''
,因为根条目是最后处理的。As you said in your answer, Chris, one option to define a default logger is to use the empty string as its key.
However, I think the intended way is to define a special logger under the
root
key of the logging configuration dictionary. I found this in the Python documentation:Here's the configuration from your answer changed to use the
root
key:To be fair, I can't see any difference in behaviour between the two configurations. It appears that defining a logger with an empty string key will modify the root logger, because
logging.getLogger('')
will return the root logger.The only reason I prefer
'root'
over''
is that it is explicit about modifying the root logger. In case you were curious,'root'
overrides''
if you define both, just because the root entry is processed last.添加后:
我们可以将格式更改为:
或
after add:
we may change format to:
or
我做了一个快速示例来检查在配置字典中引用
root
键和空''
记录器时使用的配置。打印结果如下:
表示
root
键下的配置优先级最高。如果删除该块,结果是:在这两种情况下,我都能够调试并确定所有三个记录器(
l1
、l2
和root) 引用了同一个记录器实例,即根记录器。
希望这能帮助像我一样对配置根记录器的两种不同方法感到困惑的其他人。
I made a quick sample to check what configuration is used when both
root
key and the empty''
logger are referenced in config dict.Prints the following result:
indicating that configuration under
root
key has the highest priority. If the block is removed, the result is:In both case, I was able to debug and determine that all three loggers (
l1
,l2
androot
) referenced the same logger instance, the root logger.Hope that will help others who, like me, were confused by the 2 different ways to configure the root logger.