Настройка записи по умолчанию в 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', 
  • Как загрузить пользовательский JS-файл в Django admin домой?
  • в которой python web framework (django или django-norel или pyramid) используется, когда MongoDB используется как база данных
  • django, python и шифрование ссылок
  • Ошибка при запуске приложения Django
  • Django datefield и timefield для python datetime
  • Построение Python и mod_wsgi
  • Сохранение набора python в базе данных с помощью django
  • Django: преобразование всего набора объектов модели в один словарь
  • Django South - превращение поля null = True в поле null = False
  • Как я могу зарегистрировать однопользовательский процесс регистрации Django (вместо двух шагов) с обязательным по электронной почте?
  • Создание тегов шаблонов из текущей функции
  • Python - лучший язык программирования в мире.