Ricerca…


Accesso al servizio Syslog

È possibile configurare Django per l'output del log su un servizio syslog locale o remoto. Questa configurazione utilizza il python integrato SysLogHandler .

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)

Configurazione di registrazione di base di Django

Django utilizza internamente il sistema di registrazione Python. Vi sono molti modi per configurare la registrazione di un progetto. Ecco una 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',
        },
    }
}

formattatori

Può essere utilizzato per configurare l'aspetto dei registri quando vengono stampati sull'output. È possibile definire molti formattatori impostando una stringa chiave su ogni formattatore diverso. Un formattatore viene quindi utilizzato quando si dichiara un gestore.

handlers

Può essere usato per configurare dove verranno stampati i registri. Nell'esempio sopra, vengono inviati a stdout e stderr. Esistono varie classi di gestori:

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

Ciò produrrà i file di registro immessi per filename . In questo esempio, verrà creato un nuovo file di registro quando il corrente raggiunge la dimensione di 5 MB (il vecchio viene rinominato in my_project.log.1) e gli ultimi 5 file verranno conservati per l'archiviazione.

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

Questo invierà ciascun log da eamil agli utenti specificati nella variabile di impostazione ADMINS . Il livello è impostato su ERROR , quindi solo i log con livello ERROR verranno inviati via e-mail. Questo è estremamente utile per rimanere informati su potenziali errori 50x su un server di produzione.

Altri gestori possono essere utilizzati con Django. Per un elenco completo, leggere la documentazione corrispondente. Come i formattatori, è possibile definire molti gestori in uno stesso progetto, impostando per ciascuno una stringa di chiavi diversa. Ogni gestore può essere utilizzato in un logger specifico.

logger

In LOGGING , l'ultima parte configura per ciascun modulo il livello minimo di registrazione, i gestori da utilizzare, ecc.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow