[Fixed]-How to setup SysLogHandler with Django 1.3 logging dictionary configuration

22👍

Finally found the answer, modify the configuration in the original question to have the following for ‘syslog’:

from logging.handlers import SysLogHandler 
... 
        'syslog':{ 
            'level':'DEBUG', 
            'class': 'logging.handlers.SysLogHandler', 
            'formatter': 'verbose', 
            'facility': SysLogHandler.LOG_LOCAL2, 
        },
...

Warning to future generations: you pretty much have to do it exactly like the above, weird errors happen if you specify the class directly etc.

Update: I’ve just moved to Amazon Linux (and Django 1.5) and used the following change to the configuration for the ‘syslog’ section in that environment, note the ‘address’ argument:

    'syslog':{
        'level':'DEBUG',
        'class': 'logging.handlers.SysLogHandler',
        'formatter': 'verbose',
        'facility': 'local1',
        'address': '/dev/log',
    },

10👍

This works for me (on default debian).

  1. I suspect using an address of /dev/log is the secret to ensure there is no attempt to use the network.
  2. I think using a logger label of '' equates to the root logger so will catch most stuff

In settings.py:

LOGGING = {
    'version': 1,
    'handlers': {
        'syslog':{
            'address': '/dev/log',
            'class': 'logging.handlers.SysLogHandler'
        }
    },
    'loggers': {
        '': {
            'handlers': ['syslog'],
            'level': 'DEBUG',
        }
    }
}

in the app:

    import logging
    logging.info("freakout info")

provides:

john:/var/log$ sudo tail -1 user.log
Dec 14 17:15:52 john freakout info

0👍

If you’re using remote syslog, be sure to include the port in the address field, otherwise you could get [Errno 9] Bad file descriptor

The logging config would look something like this

LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
    "verbose": {
        "format": "%(asctime)s %(name)-12s %(levelname)-8s %(message)s",
    },
},
"handlers": {
    "console": {
        "level": "INFO",
        "class": "logging.StreamHandler",
        "stream": sys.stdout,
        "formatter": "verbose",
    },
    "syslog": {
        "level": "INFO",
        "class": "logging.handlers.SysLogHandler",
        "formatter": "verbose",
        "facility": "user",
        "address": ["192.168.1.10", 514],
}
},
"loggers": {
    "": {
        "handlers": ["console", "syslog"],
        "level": "INFO",
        "propagate": True,
    },
},

}

Leave a comment