【问题标题】:How to setup SysLogHandler with Django 1.3 logging dictionary configuration如何使用 Django 1.3 日志字典配置设置 SysLogHandler
【发布时间】: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',
        },
    },
}

【问题讨论】:

    标签: django syslog


    【解决方案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 上)。

    1. 我怀疑使用/dev/log 地址是确保不尝试使用网络的秘诀。
    2. 我认为使用 '' 的记录器标签等同于根记录器,因此可以捕获大部分内容

    在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
    

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 2017-03-05
      • 2015-02-26
      • 2015-06-04
      • 2013-09-11
      • 1970-01-01
      • 2011-12-19
      • 2012-12-18
      • 2017-05-18
      相关资源
      最近更新 更多