2011-04-07 24 views
10

¿Alguien tiene un ejemplo de iniciar sesión en python con 2 o más archivos de registro diferentes?registro de python en varios archivos

que desea registrar, por ejemplo, a '/tmp/foo.log' y '/tmp/bar.log'

Gracias de antemano

T

Respuesta

14

He aquí un ejemplo:

import logging 
logger1 = logging.getLogger('1') 
logger1.addHandler(logging.FileHandler('/tmp/logger1')) 
logger2 = logging.getLogger('2') 
logger2.addHandler(logging.FileHandler('/tmp/logger2')) 

logger1.error('1') 
logger2.error('2') 

Entonces,

$ cat /tmp/logger1 
1 
$ cat /tmp/logger2 
2 
4

Aquí hay un ejemplo de trabajo completo basado en el ejemplo en logging.html. El principal 'gotcha' a tener en cuenta es que debe asegurarse de establecer el nivel de registro para que el registrador de raíz interactúe correctamente con los archivos.

import logging 

logging.getLogger('').setLevel(logging.DEBUG) 
def create_log_file(filename, level=logging.INFO): 
    handler = logging.FileHandler(filename) 
    handler.setLevel(level) 
    formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s') 
    handler.setFormatter(formatter) 
    logging.getLogger('').addHandler(handler) 

create_log_file('/temp/log1.log', logging.DEBUG) 
create_log_file('/temp/log2.log', logging.INFO) 

# Now, we can log to the root logger, or any other logger. First the root... 
logging.info('Jackdaws love my big sphinx of quartz.') 

# Now, define a couple of other loggers which might represent areas in your 
# application: 

logger1 = logging.getLogger('myapp.area1') 
logger2 = logging.getLogger('myapp.area2') 

logger1.debug('Quick zephyrs blow, vexing daft Jim.') 
logger1.info('How quickly daft jumping zebras vex.') 
logger2.warning('Jail zesty vixen who grabbed pay from quack.') 
logger2.error('The five boxing wizards jump quickly.') 
+1

pero en este ejemplo, todos los mensajes raíz aparecerán en log1.log y log2.log también? – Hein

+0

eso es porque es solo un ejemplo. Si lo desea, puede adjuntar los controladores a un registrador diferente. – Duncan

+1

Por qué atacas esta publicación, acabo de pedir un ejemplo y la publicación de Duncan me ayudó mucho mejor que la documentación. Así que gracias Duncan por tu ayuda. Pero 1 pregunta más, ¿es posible poner en cada registrador una rotación? – Hein