2012-02-23 12 views
5

¿Puedo redireccionar toda la salida de stdout a un registrador que configuré con el módulo estándar logging? (tengo os.system llamadas cuya salida también me gustaría ver o imprimir estados de occational)redireccionar stdout al registrador en Python

+2

duplicados de http://stackoverflow.com/questions/975248/redirecting-sys-stdout-to-python-logging – synthesizerpatel

+0

Gracias! De alguna manera, las sugerencias automáticas solo mostraban la redirección estándar a los archivos ... – Gerenuk

Respuesta

4

Usted puede ser capaz de hacer uso de la sugerencia en this post, que se resumen a continuación:

import logging 

class LoggerWriter: 
    def __init__(self, logger, level): 
     self.logger = logger 
     self.level = level 

    def write(self, message): 
     if message != '\n': 
      self.logger.log(self.level, message) 

def main(): 
    logging.basicConfig(level=logging.DEBUG) 
    logger = logging.getLogger("demo") 
    info_fp = LoggerWriter(logger, logging.INFO) 
    debug_fp = LoggerWriter(logger, logging.DEBUG) 
    print >> info_fp, "An INFO message" 
    print >> debug_fp, "A DEBUG message" 

if __name__ == "__main__": 
    main() 

Cuando correr, las impresiones de script:

INFO:demo:An INFO message 
DEBUG:demo:An DEBUG message 
Cuestiones relacionadas