Em um script python que estou escrevendo, estou tentando registrar eventos usando o módulo de registro. Tenho o seguinte código para configurar meu logger:
ERROR_FORMAT = "%(levelname)s at %(asctime)s in %(funcName)s in %(filename) at line %(lineno)d: %(message)s"
DEBUG_FORMAT = "%(lineno)d in %(filename)s at %(asctime)s: %(message)s"
LOG_CONFIG = {'version':1,
'formatters':{'error':{'format':ERROR_FORMAT},
'debug':{'format':DEBUG_FORMAT}},
'handlers':{'console':{'class':'logging.StreamHandler',
'formatter':'debug',
'level':logging.DEBUG},
'file':{'class':'logging.FileHandler',
'filename':'/usr/local/logs/DatabaseUpdate.log',
'formatter':'error',
'level':logging.ERROR}},
'root':{'handlers':('console', 'file')}}
logging.config.dictConfig(LOG_CONFIG)
Quando tento executar logging.debug("Some string")
, não obtenho nenhuma saída para o console, embora esta página nos documentos diga que logging.debug
o logger root deve mostrar a mensagem. Por que meu programa não está exibindo nada e como posso corrigir isso?
level != NOTSET
ou a raiz (se nenhum for encontrado). A raiz temWARNING
nível por padrão. Isso está escrito na seção que você vinculou a (Logger.setLevel
).logging
você precisa ligarlogging.basicConfig()
pelo menos uma vez. Caso contrário, você pode se surpreender ao saber que os registradores de crianças não imprimirão nada. As funções de registro no logger root o chamam de maneira preguiçosa.Muitos anos depois, parece ainda haver um problema de usabilidade com o logger do Python. Aqui estão algumas explicações com exemplos:
Uma fonte comum de confusão vem de um logger root mal inicializado. Considere isto:
Resultado:
Dependendo do seu ambiente de tempo de execução e níveis de registro, a primeira linha de registro (antes da configuração básica) pode não aparecer em qualquer lugar .
fonte
logging.basicConfig( filename='logging.txt', level=logging.DEBUG) logger = logging.getLogger() logger.info('Test B') logging.info('Test A')
logger = logging.getLogger()
, o nível está definido como WARNING, embora eu tenha especificado o nível comoDEBUG
. Você sabe o que estou fazendo de errado?Para qualquer um aqui que deseja uma resposta super simples: basta definir o nível que deseja exibir. No topo de todos os meus scripts, acabei de colocar:
Em seguida, para exibir qualquer coisa nesse nível ou acima:
É um conjunto hierárquico de cinco níveis para que os logs sejam exibidos no nível que você definir ou superior . Portanto, se você quiser exibir um erro, pode usar
logging.error("The plumbus is broken")
.Os níveis, em ordem crescente de severidade, são
DEBUG
,INFO
,WARNING
,ERROR
, eCRITICAL
. A configuração padrão éWARNING
.Este é um bom artigo que contém essas informações expressas melhor do que minha resposta:
https://www.digitalocean.com/community/tutorials/how-to-use-logging-in-python-3
fonte
Talvez tente isso? Parece que o problema foi resolvido após remover todos os manipuladores do meu caso.
fonte
SyntaxError: invalid syntax