Настройка записи по умолчанию в Django

Я не могу понять, как настроить «логгер по умолчанию» для моей установки Django. Я хотел бы использовать новый параметр LOGGING Django 1.3 в settings.py .

Я посмотрел пример Django Logging Doc , но мне кажется, что они только настраивают обработчики, которые будут выполнять ведение журнала для определенных регистраторов. В случае их примера они устанавливают обработчик для журналов с именем «django», «django.request» и «myproject.custom».

Все, что я хочу сделать, это настроить logging.handlers.RotatingFileHandler умолчанию, который по умолчанию будет обрабатывать все регистраторы. т.е. если я my_app_name.my_new_module новый модуль где-то в моем проекте и обозначается чем-то вроде: 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`! 

3 Solutions collect form web for “Настройка записи по умолчанию в Django”

Догадаться…

Вы устанавливаете логгер «catch all», ссылаясь на него с пустой строкой: '' .

Например, в следующей настройке у меня есть все записи журнала, которые сохраняются в logs/mylog.log , за исключением django.request журнала django.request которые будут сохранены в logs/django_request.log . Поскольку для « django.request logger» для django.request 'propagate' установлено значение « False , событие журнала никогда не дойдет до регистратора «catch all».

 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' }, }, 'handlers': { 'default': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': 'logs/mylog.log', 'maxBytes': 1024*1024*5, # 5 MB 'backupCount': 5, 'formatter':'standard', }, 'request_handler': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': 'logs/django_request.log', 'maxBytes': 1024*1024*5, # 5 MB 'backupCount': 5, 'formatter':'standard', }, }, 'loggers': { '': { 'handlers': ['default'], 'level': 'DEBUG', 'propagate': True }, 'django.request': { 'handlers': ['request_handler'], 'level': 'DEBUG', 'propagate': False }, } } 

Как вы сказали в своем ответе , Крис, один из вариантов определения регистратора по умолчанию – использовать пустую строку в качестве ее ключа.

Тем не менее, я думаю, что предполагаемый способ – определить специальный регистратор под root ключом словаря конфигурации ведения журнала. Я нашел это в документации Python :

root – это будет настройка корневого регистратора. Обработка конфигурации будет такой же, как для любого регистратора, за исключением того, что параметр propagate не применим.

Ниже приведена конфигурация вашего ответа с использованием root ключа:

 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' }, }, 'handlers': { 'default': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': 'logs/mylog.log', 'maxBytes': 1024*1024*5, # 5 MB 'backupCount': 5, 'formatter':'standard', }, 'request_handler': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': 'logs/django_request.log', 'maxBytes': 1024*1024*5, # 5 MB 'backupCount': 5, 'formatter':'standard', }, }, 'root': { 'handlers': ['default'], 'level': 'DEBUG' }, 'loggers': { 'django.request': { 'handlers': ['request_handler'], 'level': 'DEBUG', 'propagate': False }, } } 

Справедливости ради, я не вижу различий в поведении между двумя конфигурациями. Похоже, что определение регистратора с пустым строковым ключом приведет к изменению корневого регистратора, потому что logging.getLogger('') вернет корневой журнал.

Единственная причина, по которой я предпочитаю 'root' over '' это то, что он явно говорит об изменении корневого регистратора. В случае, если вам было любопытно, 'root' переопределяет '' если вы определяете оба варианта, только потому, что корневая запись обрабатывается последним.

 import logging logger = logging.getLogger(__name__) 

после добавления:

 logging.basicConfig( level = logging.DEBUG, format = '%(name)s %(levelname)s %(message)s', ) 

мы можем изменить формат:

 format = '"%(levelname)s:%(name)s:%(message)s" ', 

или

 format = '%(name)s %(asctime)s %(levelname)s %(message)s', 
  • Сохранение набора форм с выпадающим меню Foreignkey: IntegrityError XXX_id может не быть NULL
  • Возможна ли логическая логика в шаблонах django?
  • Пользовательский заказ в Django
  • Django Storage Backend для S3
  • Как правильно использовать параметр «Выбор» в Django
  • Отправка формы Django в модуле Bootstrap Modal
  • Ошибка сборки при развертывании приложения Django в Heroku
  • Достаточно ли дьянго-поршень?
  • Python - лучший язык программирования в мире.