¿Hay alguna manera de hacer que el registro de Python usando el logging
módulo genere automáticamente cosas para stdout además del archivo de registro donde se supone que deben ir? Por ejemplo, me gustaría que todas las llamadas a logger.warning
, logger.critical
, logger.error
para ir a los lugares pensados pero además siempre se va a copiar a stdout
. Esto es para evitar duplicar mensajes como:
mylogger.critical("something failed")
print "something failed"
Respuestas:
Todos los resultados de registro son manejados por los manejadores; simplemente agregue un
logging.StreamHandler()
al registrador raíz.Aquí hay un ejemplo configurando un controlador de flujo (usando en
stdout
lugar del predeterminadostderr
) y agregándolo al registrador raíz:fuente
stdout
?logging.Formatter
.La forma más sencilla de iniciar sesión en stdout:
fuente
stream=sys.stdout
aún funciona para iniciar sesión en la consola para mí.Es posible usar múltiples manejadores.
Consulte: https://docs.python.org/2/howto/logging-cookbook.html
fuente
sys.stdout
parámetro ench = logging.StreamHandler()
Puede crear dos controladores para archivo y stdout y luego crear un registrador con
handlers
argumento parabasicConfig
. Podría ser útil si tiene la misma salida log_level y formato para ambos manejadores:fuente
La forma más sencilla de iniciar sesión en el archivo y stderr:
fuente
Aquí hay una solución basada en el
logging.config.dictConfig
método poderoso pero poco documentado . En lugar de enviar cada mensaje de registro astdout
, envía mensajes con nivel de registroERROR
y superior astderr
y todo lo demás astdout
. Esto puede ser útil si otras partes del sistema están escuchandostderr
ostdout
.fuente
Como nadie ha compartido un lindo dos líneas, compartiré el mío:
fuente
Aquí hay un ejemplo extremadamente simple:
La salida mostrará "test msg" en stdout y también en el archivo.
fuente