Pregunta

He leído a través de la documentación del módulo de registro y mientras que puede haber perdido algo obvio, el código que tengo no parece estar funcionando según lo previsto. Estoy usando Python 2.6.4.

Mi programa consta de varios archivos diferentes pitón, de la que desea enviar mensajes de registro a un archivo de texto y, potencialmente, la pantalla. Me imagino que esto es una cosa común para hacerlo yo estoy jugando con esto en alguna parte.

Lo que mi código está haciendo en el momento es el registro en el fichero de texto correctamente, un poco. Pero el registro en la pantalla está siendo duplicado, uno con el formato especificado, y otro sin él. Además, cuando apago la salida de la pantalla, sigo teniendo el texto impreso una vez, que no quiero - Yo sólo quiero que se registra en el archivo

.

De todos modos, algo de código:

#logger.py
import logging
from logging.handlers import RotatingFileHandler
import os

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):        
    logdir = os.path.abspath(logdir)

    if not os.path.exists(logdir):
        os.mkdir(logdir)

    log = logging.getLogger('stumbler')
    log.setLevel(loglevel)

    log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

    if txtlog:
        txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
        txt_handler.doRollover()
        txt_handler.setFormatter(log_formatter)
        log.addHandler(txt_handler)
        log.info("Logger initialised.")

    if scrnlog:
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(log_formatter)
        log.addHandler(console_handler)

No hay nada inusual allí.

#core.py
import logging
corelog = logging.getLogger('stumbler.core')  # From what I understand of the docs, this should work :/

class Stumbler:
    [...]

    corelog.debug("Messages and rainbows...")

La salida de pantalla muestra cómo se está duplicando:

2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe

A pesar de que el archivo de texto es conseguir la salida con formato correcto, girando el registro fuera de la pantalla en logger.py todavía ha mostrado la salida con formato incorrecto.

Por lo que entiendo de los documentos, llamando corelog.debug (), ya que corelog es un hijo del registrador "tropezador", se debe utilizar ese formato y la salida de los registros como tales.

Disculpas por el ensayo sobre un tema tan trivial.

TL; DR:? ¿Cómo hacer conexiones desde múltiples archivos

¿Fue útil?

Solución

¿Seguro ninguna otra configuración de registro se está haciendo en todo lo que importa.

La salida incorrecta en sus registros de la consola parece a la configuración por defecto para un registrador, así que algo más, puede estar poniendo eso.

Al ejecutar este script de prueba rápida:

import logging
from logging.handlers import RotatingFileHandler
import os

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
    logdir = os.path.abspath(logdir)

    if not os.path.exists(logdir):
        os.mkdir(logdir)

    log = logging.getLogger('stumbler')
    log.setLevel(loglevel)

    log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

    if txtlog:
        txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
        txt_handler.doRollover()
        txt_handler.setFormatter(log_formatter)
        log.addHandler(txt_handler)
        log.info("Logger initialised.")

    if scrnlog:
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(log_formatter)
        log.addHandler(console_handler)



setup_logging('/tmp/logs')
corelog = logging.getLogger('stumbler.core')
corelog.debug("Messages and rainbows...")

produce este resultado:

  

2010-01-08 15: 39: 25,335 - debug ::   Mensajes y arcoiris ...

y en mi /tmp/logs/Stumbler.log

  

2010-01-08 15: 39: 25,335 - INFO ::   Registrador inicializado. 2010-01-08   15: 39: 25,335 - debug :: Mensajes y   arcoiris ...

Esto funcionó como se esperaba cuando me encontré con él en Python 2.4, 2.5 y 2.6.4

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top