18

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',
        },
    },
}
4

2 に答える 2

22

最後に答えが見つかりました。元の質問の構成を変更して、「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',
    },
于 2011-06-03T17:32:51.233 に答える
10

これは私にとってはうまくいきます(デフォルトの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
于 2011-12-14T06:28:37.170 に答える