Eu tenho um pequeno projeto python que tem a seguinte estrutura -
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
Planejo usar o módulo de log padrão para imprimir mensagens no stdout e em um arquivo de log. Para usar o módulo de log, é necessária alguma inicialização -
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
No momento, eu executo essa inicialização em todos os módulos antes de começar a registrar mensagens. É possível executar essa inicialização apenas uma vez em um local, para que as mesmas configurações sejam reutilizadas registrando-se em todo o projeto?
package/__init__.py
. Normalmente, esse não é o lugar onde você coloca o if __name__ == '__main__'
código. Além disso, o exemplo de prost parece chamar o código de configuração incondicionalmente na importação, o que não parece correto para mim. Geralmente, o código de configuração de log deve ser feito em um único local e não deve ocorrer como efeito colateral da importação, exceto quando você estiver importando __main__.
if __name__ == '__main__'
? (não é mencionada explicitamente em questão, se este for o caso)
fileConfig
todos os módulos que efetuam log, a menos que tenhaif __name__ == '__main__'
lógica em todos eles. A resposta de prost não é uma boa prática se o pacote for uma biblioteca, embora possa funcionar para você - não se deve configurar o logon em pacotes da biblioteca, exceto adicionar aNullHandler
.