Как я могу отправлять сообщения трассировки на консоль (например, print
), когда я запускаю свое приложение Django под manage.py runserver
, но отправлять эти сообщения в файл журнала, когда я запускаю приложение под Apache?
Я изучил ведение журнала Django, и хотя меня впечатлила его гибкость и возможность настройки для расширенного использования, я все еще не понимаю, как справиться с моим простым вариантом использования.
Ответы:
Текст, напечатанный в stderr, будет отображаться в журнале ошибок httpd при запуске под mod_wsgi. Вы можете использовать его
print
напрямую илиlogging
вместо него.источник
print("Goodbye cruel world!", file=sys.stderr)
Вот решение на основе журналов Django. Он использует настройку DEBUG, а не фактически проверяет, запущен ли вы сервер разработки, но если вы найдете лучший способ проверить это, его будет легко адаптировать.
подробности см. на https://docs.djangoproject.com/en/dev/topics/logging/ .
источник
LOGGING['loggers'][logger]['handlers'] += ['console']
settings.py
внизу и устанавливаюDEBUG = True
(ищите этот параметр вверху в том же файле). Затем я запускаюpython manage.py runserver
с терминала (подробности см. В документации django), и сообщения журнала появятся в окне терминала. В производстве я бы использовал другой файл settings.py, гдеDEBUG = False
- сообщения журнала/path/to/your/file.log
.Вы можете настроить вход в свой
settings.py
файле.Один пример:
Однако это зависит от настройки DEBUG, и, возможно, вам не нужно беспокоиться о том, как он настроен. См. Этот ответ в разделе Как узнать, работает ли мое приложение Django на сервере разработки или нет? для лучшего способа написания этого условного. Изменить: приведенный выше пример взят из проекта Django 1.1, конфигурация ведения журнала в Django несколько изменилась с той версии.
источник
Я использую это:
logging.conf:
testapp.py:
источник
Вы можете сделать это довольно легко с помощью
tagalog
(https://github.com/dorkitude/tagalog)Например, в то время как стандартный модуль python записывает в объект файла, открытый в режиме добавления, модуль App Engine (https://github.com/dorkitude/tagalog/blob/master/tagalog_appengine.py) отменяет это поведение и вместо этого использует
logging.INFO
.Чтобы добиться такого поведения в проекте App Engine, можно просто сделать:
Вы можете самостоятельно расширить модуль и без особого труда перезаписать функцию журнала.
источник
Это довольно хорошо работает в моем local.py, избавляя меня от испорченного обычного ведения журнала:
источник