Não consigo descobrir como configurar um logger "padrão" para minha instalação do Django. Eu gostaria de usar a nova LOGGING
configuração do Django 1.3 em settings.py
.
Eu olhei o exemplo do Django Logging Doc , mas me parece que eles apenas configuram manipuladores que farão o registro para loggers específicos. No caso do exemplo deles, eles configuraram o manipulador para os loggers chamados 'django', 'django.request' e 'myproject.custom'.
Tudo que eu quero fazer é configurar um padrão logging.handlers.RotatingFileHandler
que irá controlar todos os loggers por padrão. ou seja, se eu fizer um novo módulo em algum lugar do meu projeto e ele for denotado por algo como my_app_name.my_new_module
:, devo ser capaz de fazer isso e fazer com que todos os logs vão para os logs do arquivo rotativo.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
logs/
pasta primeiro :-). Caso contrário, você obterá um erro ao executar./manange.py runserver
. @Chris W. Obrigado por suas configurações de registro de exemplo. Me ajudou muito!logger = logging.getLogger('foo'); logger.warn('bar');
isso, odefault
manipulador irá capturar esse registro e algo como<time> WARN: foo: bar
terminará emlogs/mylog.log
Como você disse em sua resposta , Chris, uma opção para definir um logger padrão é usar a string vazia como sua chave.
No entanto, acho que a forma pretendida é definir um logger especial sob a
root
chave do dicionário de configuração de log. Eu encontrei isso na documentação do Python :Aqui está a configuração de sua resposta alterada para usar a
root
chave:Para ser justo, não consigo ver nenhuma diferença de comportamento entre as duas configurações. Parece que definir um logger com uma chave de string vazia modificará o logger raiz, porque
logging.getLogger('')
retornará o logger raiz.A única razão que eu prefiro
'root'
mais''
é que ele é explícito sobre como modificar o logger raiz. Caso você esteja curioso,'root'
substitui''
se você definir ambos, apenas porque a entrada raiz é processada por último.fonte
root
entrada para a raiz do dict no processo de transição suave de uma lógica 2.6 fileConfig para 2.7 dictConfig.depois de adicionar:
podemos mudar o formato para:
ou
fonte
Fiz uma amostra rápida para verificar qual configuração é usada quando a
root
chave e o''
logger vazio são referenciados no config dict.Imprime o seguinte resultado:
indicando que a configuração na
root
chave tem a prioridade mais alta. Se o bloco for removido, o resultado será:Em ambos os casos, consegui depurar e determinar que todos os três registradores (
l1
,l2
eroot
) fizeram referência à mesma instância do registrador, o registrador raiz.Espero que ajude outras pessoas que, como eu, ficaram confusas com as 2 maneiras diferentes de configurar o logger de root.
fonte