如何使用 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 1.3 用于在开发环境中进行调试的日志记录

Django:如何将日志级别设置为 INFO 或 DEBUG

Django配置多数据库

DjangoDjango 如何使用 Django设置的日志?

如何使用 Django 变量设置 HTML 元素的宽度?

Django日志配置