Pergunta

Eu li a documentação do módulo de registro e, embora eu tenha perdido algo óbvio, o código que tenho não parece estar funcionando como pretendido. Estou usando o Python 2.6.4.

Meu programa consiste em vários arquivos Python diferentes, dos quais quero enviar mensagens de log para um arquivo de texto e, potencialmente, a tela. Eu imagino que isso é uma coisa comum a fazer, então estou estragando isso em algum lugar.

O que meu código está fazendo no minuto está registrando o arquivo de texto corretamente, meio. Mas o log na tela está sendo duplicado, um com a formatação especificada e outra sem. Além disso, quando desligo a saída da tela, ainda estou imprimindo o texto uma vez, o que não quero - só quero que seja registrado no arquivo.

Enfim, algum 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 incomum lá.

#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...")

A saída da tela mostra como isso está sendo duplicado:

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

Embora o TextFile esteja obtendo a saída formatada corretamente, desligando o logs da tela no logger.py ainda possui a saída formatada incorretamente exibida.

Pelo que entendi dos documentos, chamando o Corelog.debug (), visto que o Corelog é um filho do Logger "Stumbler", ele deve usar essa formatação e saída dos logs como tal.

Desculpas pelo ensaio por uma questão tão trivial.

TL; DR: Como faço o log de vários arquivos?

Foi útil?

Solução

Você tem certeza de que nenhuma outra configuração de registro está sendo feita em qualquer coisa que você importe.

A saída incorreta em seus logs de console parece a configuração padrão para um logger, para que algo mais possa estar configurando isso.

Executa este script de teste rápido:

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...")

produz este resultado:

2010-01-08 15: 39: 25.335-Debug :: Mensagens e arco-íris ...

E no meu /tmp/logs/stumbler.log

2010-01-08 15: 39: 25.335-Info :: Logger inicializado. 2010-01-08 15: 39: 25.335-Debug :: Mensagens e arco-íris ...

Isso funcionou como esperado quando eu o executei em Python 2.4, 2.5 e 2.6.4

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top