No puedo entender el logging
módulo de Python . Mis necesidades son muy simples: solo quiero registrar todo en syslog. Después de leer la documentación, se me ocurrió este sencillo script de prueba:
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler()
my_logger.addHandler(handler)
my_logger.debug('this is debug')
my_logger.critical('this is critical')
Pero este script no genera ningún registro en syslog. ¿Qué pasa?
Respuestas:
Cambie la línea a esto:
Esto funciona para mi
fuente
'/var/run/syslog'
es lo correcto en OS X.logging.Formatter(fmt='myscriptname[%(process)d]: %(levelname)s: %(message)s', ...)
, una condición rsyslog como$programname == 'myscriptname'
funciona.Usted debe siempre utilizar la máquina local para el registro, ya sea a / dev / log o host local a través de la pila TCP. Esto permite que el demonio de registro del sistema, totalmente compatible con RFC y con funciones, maneje syslog. Esto elimina la necesidad de que el demonio remoto sea funcional y proporciona las capacidades mejoradas de los demonios syslog como rsyslog y syslog-ng, por ejemplo. La misma filosofía se aplica a SMTP. Simplemente entréguelo al software SMTP local. En este caso, use el 'modo de programa', no el demonio, pero es la misma idea. Deje que el software más capaz lo maneje. Es posible reintentar, poner en cola, poner en cola local, usar TCP en lugar de UDP para syslog, etc. También puede [volver a] configurar esos demonios por separado de su código, como debería ser.
Guarde su codificación para su aplicación, deje que otro software haga su trabajo en conjunto.
fuente
Encontré el módulo syslog para que sea bastante fácil obtener el comportamiento de registro básico que describe:
También hay otras cosas que podría hacer, pero incluso las dos primeras líneas le darán lo que ha pedido, según tengo entendido.
fuente
Uniendo las cosas desde aquí y otros lugares, esto es lo que se me ocurrió que funciona en unbuntu 12.04 y centOS6
Cree un archivo
/etc/rsyslog.d/
que termine en .conf y agregue el siguiente textoReinicie
rsyslog
, la recarga NO pareció funcionar para los nuevos archivos de registro. ¿Quizás solo recarga archivos conf existentes?Luego, puede usar este programa de prueba para asegurarse de que realmente funcione.
fuente
sudo service rsyslog restart
Agrego un pequeño comentario adicional en caso de que ayude a alguien porque encontré este intercambio útil pero necesitaba esta pequeña información adicional para que todo funcione.
Para iniciar sesión en una instalación específica utilizando SysLogHandler, debe especificar el valor de la instalación. Digamos, por ejemplo, que ha definido:
local3.* /var/log/mylog
en syslog, entonces querrás usar:
handler = logging.handlers.SysLogHandler(address = ('localhost',514), facility=19)
y también necesita tener syslog escuchando en UDP para usar localhost en lugar de / dev / log.
fuente
¿Su syslog.conf está configurado para manejar facilidad = usuario?
Puede configurar la instalación utilizada por el registrador de Python con el argumento de instalación, algo como esto:
fuente
LOG_DAEMON
que proporciona como valor para elfacility
parámetro.SysLogHandler.LOG_DAEMON
.la secuencia de comandos anterior se registrará en la instalación LOCAL0 con nuestro "LOG_IDENTIFIER" personalizado ... puede utilizar LOCAL [0-7] para fines locales.
fuente
De https://github.com/luismartingil/per.scripts/tree/master/python_syslog
fuente
Aquí está la forma yaml dictConfig recomendada para 3.2 y posteriores.
En registro
cfg.yml
:Cargue la configuración usando:
Configurado tanto syslog como un archivo directo. Tenga en cuenta que
/dev/log
es específico del sistema operativo.fuente
Lo arreglo en mi cuaderno. El servicio rsyslog no escuchó en el servicio de socket.
Configuré esta línea a continuación en el
/etc/rsyslog.conf
archivo y resolví el problema:$SystemLogSocketName /dev/log
fuente
También puede agregar un controlador de archivos o un controlador de archivos rotativo para enviar sus registros a un archivo local: http://docs.python.org/2/library/logging.handlers.html
fuente