He leído la documentación del módulo de registro y, aunque es posible que haya olvidado algo obvio, el código que tengo no parece funcionar según lo previsto. Estoy usando Python 2.6.4.Registro de Python en varios archivos
Mi programa consiste en varios archivos de python diferentes, desde los cuales deseo enviar mensajes de registro a un archivo de texto y, potencialmente, a la pantalla. Me imagino que esto es algo común de hacer, así que estoy arruinando esto en algún lado.
Lo que mi código está haciendo en este momento es iniciar sesión en el archivo de texto correctamente, un poco. Pero el registro en la pantalla se está duplicando, uno con el formato especificado y otro sin él. Además, cuando apago la salida de la pantalla, sigo obteniendo el texto impreso una vez, lo que no quiero, solo quiero que se registre 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)
Nada raro 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á duplicada:
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
Aunque el archivo de texto está recibiendo la salida con formato correcto, girando el registro fuera de la pantalla en logger.py todavía tiene la salida con formato incorrecto que se muestra .
Por lo que entiendo de los documentos, al llamar a corelog.debug(), ya que corelog es un elemento secundario del registrador "stumbler", debe usar ese formato y generar los registros como tales.
Disculpas por el ensayo sobre un tema tan trivial.
TL; DR: ¿Cómo puedo iniciar sesión desde varios archivos?
Wow , punto en. Tenía logging.basicConfig() aún en uso en algunos de mis otros módulos. NUNCA se me ocurrió que podrían estar causando los problemas. ¡Gracias! – Loix0