我似乎不知道如何为我的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`!
4条答案
按热度按时间o4hqfura1#
想明白了...
您可以通过使用空字符串引用'catch all'记录器来设置它:
''
。例如,在下面的设置中,我将所有日志事件保存到
logs/mylog.log
,除了django.request
日志事件将保存到logs/django_request.log
。因为'propagate'
被设置为False
,所以日志事件永远不会到达'catch all'日志记录器。utugiqy62#
正如您在your answer中所说,Chris,定义默认日志记录器的一个选项是使用空字符串作为其键。
然而,我认为预期的方法是在日志配置字典的
root
键下定义一个特殊的logger。我在Python文档中找到了这个:propagate
设置将不适用。下面是您的答案中的配置,更改为使用
root
密钥:公平地说,我看不出这两种配置在行为上有什么区别。似乎用空字符串键定义一个日志记录器会修改根日志记录器,因为
logging.getLogger('')
将返回根日志记录器。我更喜欢
'root'
而不是''
的唯一原因是它明确地修改了根日志记录器。如果你好奇的话,如果你同时定义了'root'
和''
,那么'root'
会覆盖''
,这只是因为根条目是最后处理的。ymzxtsji3#
在后面加上:
我们可能会将格式更改为:
或
wlp8pajw4#
我做了一个快速的示例来检查当
root
键和空的''
记录器都在config dict中引用时使用了什么配置。打印以下结果:
表示
root
键下的配置优先级最高,如果移除该块,结果为:在这两种情况下,我都能够调试并确定所有三个记录器(
l1
、l2
和root
)引用了相同的记录器示例,即根记录器。希望这将帮助其他人,像我一样,被2种不同的方式配置根记录器所困惑。