¿Hay alguna manera de hacer que el registro de Python usando el loggingmó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.errorpara 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
stdoutlugar 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.stdoutaú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.stdoutparámetro ench = logging.StreamHandler()Puede crear dos controladores para archivo y stdout y luego crear un registrador con
handlersargumento 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.dictConfigmétodo poderoso pero poco documentado . En lugar de enviar cada mensaje de registro astdout, envía mensajes con nivel de registroERRORy superior astderry todo lo demás astdout. Esto puede ser útil si otras partes del sistema están escuchandostderrostdout.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