python - multiple - syslog.syslog vs SysLogHandler
python logging rotatingfilehandler example (3)
El módulo de registro es una solución más completa que potencialmente puede manejar todos sus mensajes de registro y es muy flexible. Por ejemplo, puede configurar varios manejadores para su registrador y cada uno puede configurarse para iniciar sesión en un nivel diferente. Puede tener un SysLogHandler para enviar errores a syslog y un FileHandler para depurar los registros, y un SMTPHandler para enviar por correo electrónico los mensajes realmente críticos a las operaciones. También puede definir una jerarquía de registradores dentro de sus módulos, y cada uno tiene su propio nivel para que pueda habilitar / deshabilitar mensajes de módulos específicos, tales como:
import logging
logger = logging.getLogger(''package.stable_module'')
logger.setLevel(logging.WARNING)
Y en otro módulo:
import logging
logger = logging.getLogger(''package.buggy_module'')
logger.setLevel(logging.DEBUG)
Los mensajes de registro en ambos de estos módulos se enviarán, dependiendo del nivel, al registrador de "paquetes" y, en última instancia, a los manejadores que ha definido. También puede agregar manejadores directamente a los registradores de módulos, y así sucesivamente. Si ha seguido hasta aquí y todavía está interesado, le recomiendo que vaya al tutorial registro para obtener más detalles.
Estoy viendo cómo iniciar sesión en syslog desde mi aplicación Python, y descubrí que hay dos formas de hacerlo:
- Usando rutinas syslog.syslog()
- Usando el módulo logger SysLogHandler
Cuál es la mejor opción para usar, las ventajas / desventajas de cada uno, etc., porque realmente no sé cuál debería usar.
Hasta ahora, hay una desventaja en logging.handlers.SysLogHander
que aún no se menciona. Es decir, no puedo establecer opciones como LOG_ODELAY
o LOG_NOWAIT
o LOG_PID
. Por otro lado, LOG_CONS
y LOG_PERROR
se pueden lograr agregando más manejadores, y LOG_NDELAY
ya está configurado de manera predeterminada, porque la conexión se abre cuando se crea una instancia del manejador.
syslog.syslog()
solo se puede utilizar para enviar mensajes al syslogd local. SysLogHandler
se puede utilizar como parte de un subsistema de registro completo y configurable, y puede iniciar sesión en máquinas remotas.