Как настроить SysLogHandler с настройкой словаря журналирования Django 1.3 - PullRequest
18 голосов
/ 01 июня 2011

Мне не повезло найти какую-либо информацию о настройке ведения журнала syslog с помощью конфигурации словаря Django 1.3.Документы Django не охватывают системный журнал, а документация по 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',
        },
    },
}

Ответы [ 2 ]

22 голосов
/ 03 июня 2011

Наконец-то нашел ответ, измените конфигурацию в исходном вопросе, чтобы в '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',
    },
9 голосов
/ 14 декабря 2011

Это работает для меня (по умолчанию в 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
...