Кажется, я не могу понять, как настроить регистратор "по умолчанию" для моей установки Django. Я хотел бы использовать новую LOGGING
настройку Django 1.3 в settings.py
.
Я просмотрел пример Django Logging Doc , но мне кажется, что они только настраивают обработчики, которые будут вести журнал для определенных регистраторов. В случае их примера они устанавливают обработчик для регистраторов с именами «django», «django.request» и «myproject.custom».
Все, что я хочу сделать, это установить значение по умолчанию, logging.handlers.RotatingFileHandler
которое по умолчанию будет обрабатывать все регистраторы. то есть, если я создаю новый модуль где-нибудь в моем проекте, и это обозначается чем-то вроде:, my_app_name.my_new_module
я должен иметь возможность сделать это, и все журналы будут переходить в журналы смены файлов.
# 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/
сначала вам нужно создать папку :-). В противном случае вы получите ошибку при запуске./manange.py runserver
. @Chris W. Спасибо за ваш пример настроек ведения журнала. Это мне очень помогло!logger = logging.getLogger('foo'); logger.warn('bar');
тоdefault
обработчик будет ловить , что протоколирование и что - то вроде<time> WARN: foo: bar
будет в конечном итоге вlogs/mylog.log
Как вы сказали в своем ответе , Крис, одним из вариантов определения регистратора по умолчанию является использование пустой строки в качестве ключа.
Однако я думаю, что предполагаемый способ - определить специальный регистратор под
root
ключом словаря конфигурации регистрации. Я нашел это в документации Python :Вот конфигурация из вашего ответа, измененная для использования
root
ключа:Честно говоря, я не вижу никакой разницы в поведении между двумя конфигурациями. Похоже, что определение регистратора с ключом пустой строки изменит корневой регистратор, потому
logging.getLogger('')
что вернет корневой регистратор.Единственная причина , я предпочитаю
'root'
более''
, что это явно об изменении корневого регистратора. Если вам интересно,'root'
переопределяет,''
если вы определяете оба, просто потому, что корневая запись обрабатывается последней.источник
root
записи в корень dict в процессе плавного перехода с логики 2.6 fileConfig на 2.7 dictConfig.после добавления:
мы можем изменить формат на:
или
источник
Я сделал быстрый образец, чтобы проверить, какая конфигурация используется, когда в config dict есть ссылка на
root
ключ и пустой''
регистратор.Выводит следующий результат:
указывает, что конфигурация под
root
ключом имеет наивысший приоритет. Если блок удалить, результат будет:В обоих случаях я смог отладить и определить, что все три регистратора (
l1
,l2
иroot
) ссылаются на один и тот же экземпляр регистратора, корневой регистратор.Надеюсь, что это поможет другим, которые, как и я, были сбиты с толку двумя разными способами настройки корневого регистратора.
источник