如何使用 Django 1.3 日志字典配置设置 SysLogHandler
Posted
技术标签:
【中文标题】如何使用 Django 1.3 日志字典配置设置 SysLogHandler【英文标题】:How to setup SysLogHandler with Django 1.3 logging dictionary configuration 【发布时间】:2011-06-01 17:26:19 【问题描述】:我没有找到任何有关使用 Django 1.3 字典配置设置 syslog 日志记录的信息。 Django 文档不包含 syslog,python 文档不够清晰,根本不包含字典配置。我已经从以下开始,但我一直坚持如何配置 SysLogHandler。
LOGGING =
'version': 1,
'disable_existing_loggers': True,
'formatters':
'verbose':
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
,
'simple':
'format': '%(levelname)s %(message)s'
,
,
'handlers':
'syslog':
'level':'DEBUG',
'class':'logging.handlers.SysLogHandler',
'formatter': 'verbose'
,
,
'loggers':
'django':
'handlers':['syslog'],
'propagate': True,
'level':'INFO',
,
'myapp':
'handlers': ['syslog'],
'propagate': True,
'level': 'DEBUG',
,
,
【问题讨论】:
【参考方案1】:终于找到答案了,修改原问题中的配置为'syslog'如下:
from logging.handlers import SysLogHandler
...
'syslog':
'level':'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'formatter': 'verbose',
'facility': SysLogHandler.LOG_LOCAL2,
,
...
对后代的警告:您几乎必须完全按照上述方式进行操作,如果您直接指定类等会出现奇怪的错误。
更新:我刚刚迁移到 Amazon Linux(和 Django 1.5)并对该环境中的“syslog”部分的配置进行了以下更改,请注意“address”参数:
'syslog':
'level':'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'formatter': 'verbose',
'facility': 'local1',
'address': '/dev/log',
,
【讨论】:
在我看来这里的上下文很重要 - 'syslog' 在处理程序中 - 对吧?除非它被定义,否则格式化程序也不会工作。可能值得删除它以避免混淆(就像我的一样)。 @ajostergaard 更新以明确这些是对原始字典的更改。如果他们不是更清楚,请告诉我。 我们如何给这个自定义标签?我需要在 rsyslog 中识别我的日志条目并过滤它们。你可以在 python 日志中做到这一点,但我不知道如何在 django 中做到这一点。你知道吗?【参考方案2】:这对我有用(在默认的 debian 上)。
-
我怀疑使用
/dev/log
地址是确保不尝试使用网络的秘诀。
我认为使用 ''
的记录器标签等同于根记录器,因此可以捕获大部分内容
在settings.py中:
LOGGING =
'version': 1,
'handlers':
'syslog':
'address': '/dev/log',
'class': 'logging.handlers.SysLogHandler'
,
'loggers':
'':
'handlers': ['syslog'],
'level': 'DEBUG',
在应用程序中:
import logging
logging.info("freakout info")
提供:
john:/var/log$ sudo tail -1 user.log
Dec 14 17:15:52 john freakout info
【讨论】:
以上是关于如何使用 Django 1.3 日志字典配置设置 SysLogHandler的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何将日志级别设置为 INFO 或 DEBUG