Recherche…


Connexion au service Syslog

Il est possible de configurer Django pour générer un journal vers un service syslog local ou distant. Cette configuration utilise le SysLogHandler intégré à python.

from logging.handlers import SysLogHandler
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[YOUR PROJECT NAME] [%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
        'syslog': {
            'class': 'logging.handlers.SysLogHandler',
            'formatter': 'standard',
            'facility': 'user',
            # uncomment next line if rsyslog works with unix socket only (UDP reception disabled)
            #'address': '/dev/log'
        }
    },
    'loggers': {
        'django':{
            'handlers': ['syslog'],
            'level': 'INFO',
            'disabled': False,
            'propagate': True
        }
    }
}

# loggers for my apps, uses INSTALLED_APPS in settings
# each app must have a configured logger
# level can be changed as desired: DEBUG, INFO, WARNING...
MY_LOGGERS = {}
for app in INSTALLED_APPS:
    MY_LOGGERS[app] = {
        'handlers': ['syslog'],
        'level': 'DEBUG',
        'propagate': True,
    }
LOGGING['loggers'].update(MY_LOGGERS)

Configuration de base de Django

En interne, Django utilise le système de journalisation Python. Il existe plusieurs façons de configurer la journalisation d'un projet. Voici une base:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'default': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'default'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'INFO',
        },
    }
}

Les formateurs

Il peut être utilisé pour configurer l'apparence des journaux lorsqu'ils sont imprimés sur la sortie. Vous pouvez définir de nombreux formateurs en définissant une chaîne de clé pour chaque formateur. Un formateur est ensuite utilisé lors de la déclaration d'un gestionnaire.

Manieurs

Peut être utilisé pour configurer où les journaux seront imprimés. Dans l'exemple ci-dessus, ils sont envoyés à stdout et à stderr. Il existe différentes classes de gestionnaires:

'rotated_logs': {
    'class': 'logging.handlers.RotatingFileHandler',
    'filename': '/var/log/my_project.log',
    'maxBytes': 1024 * 1024 * 5,  # 5 MB
    'backupCount': 5,
    'formatter': 'default'
    'level': 'DEBUG',
},

Cela produira des logs dans le fichier tergeted par filename . Dans cet exemple, un nouveau fichier journal sera créé lorsque la taille actuelle atteindra la taille de 5 Mo (l’ancien sera renommé en my_project.log.1) et les 5 derniers fichiers seront conservés pour l’archivage.

'mail_admins': {
    'level': 'ERROR',
    'class': 'django.utils.log.AdminEmailHandler'
},

Cela enverra chaque journal par eamil aux utilisateurs spécifiés dans la variable de réglage ADMINS . Le niveau est défini sur ERROR , de sorte que seuls les journaux avec le niveau ERROR seront envoyés par courrier électronique. Ceci est extrêmement utile pour rester informé sur les erreurs potentielles 50x sur un serveur de production.

D'autres gestionnaires peuvent être utilisés avec Django. Pour une liste complète, veuillez lire la documentation correspondante. Comme pour les formateurs, vous pouvez définir plusieurs gestionnaires dans un même projet, définissant pour chacun une chaîne de clé différente. Chaque gestionnaire peut être utilisé dans un enregistreur spécifique.

Bûcherons

Dans LOGGING , la dernière partie configure pour chaque module le niveau de consignation minimal, le ou les gestionnaires à utiliser, etc.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow