Регистрация Django на Heroku

Я знаю, что этот вопрос уже задавался несколько раз, но я просто не могу заставить его работать. Я уже полдня пробовал десятки комбинаций, и снова сейчас, и он все еще не работает.

В моем коде я регистрирую несколько частей, например, внутри try-except или записывать некоторую информацию из команд управления. Я делаю очень нормальные вещи, которые работают с несколькими локальными установками и на некоторых серверах Nginx.

Файл python, подобный этому:

import logging logger = logging.getLogger(__name__) logger.info('some important infos') 

Со следующим минимальным параметром settings.py (я пробовал без указания потока, без указанных журналов, с именованными регистраторами, почти всеми возможными комбинациями, и я также пробовал гораздо более сложные)

 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', 'stream': sys.stdout } }, 'loggers': { 'django': { 'handlers': ['console'], 'propagate': True, 'level': 'INFO', }, '': { 'handlers': ['console'], 'level': 'INFO', } } } 

Затем также просто протестировали из оболочки heroku run python

 import logging level = logging.INFO handler = logging.StreamHandler() handler.setLevel(level) handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) logger = logging.getLogger('info') logger.addHandler(handler) logger.setLevel(level) #even if not required... logger.info('logging test') 

Последний может отображаться как оператор «print» в консоли, но ни здесь, ни из команды или сервера ничто никогда не появляется в heroku logs ….

EDIT: на самом деле у меня есть некоторые записи, которые появляются, журналы приложений, например, следующие, просто не мои:

 2013-09-20T15:00:16.405492+00:00 heroku[run.2036]: Process exited with status 0 2013-09-20T15:00:17+00:00 app[heroku-postgres]: source=HEROKU_POSTGRESQL_OLIVE sample[...] 2013-09-20T14:59:47.403049+00:00 heroku[router]: at=info method=GET path=/ 2013-09-20T14:59:16.304397+00:00 heroku[web.1]: source=web.1 dyno=heroku [...] 

Я также попытался найти записи, используя несколько аддонов. Я на мгновение в начале newrelic, который я также отключил от запуска WSGI. Я не помню, если в то время он работал хорошо, свободный тестовый период newrelic довольно короткий.

Ну, я не знаю, что я мог бы попробовать еще … Спасибо за любую подсказку

2 Solutions collect form web for “Регистрация Django на Heroku”

Вход в Heroku из Django может быть сложным сначала, но на самом деле это не так ужасно, чтобы его настроить.

Это определение logging (входит в ваш файл настроек) определяет два форматирования. Многословный соответствует формату протоколирования, который использует сам Героку. Он также определяет два обработчика, нулевой обработчик (не обязательно должен использоваться) и обработчик консоли – консольный обработчик – это то, что вы хотите использовать с Heroku. Причиной этого является то, что регистрация на Heroku работает простым регистратором потока, регистрируя любой вывод, сделанный в stdout / stderr. Наконец, я определил один регистратор под названием testlogger – эта часть определения журнала выглядит как обычная для определения протоколирования.

 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': ('%(asctime)s [%(process)d] [%(levelname)s] ' + 'pathname=%(pathname)s lineno=%(lineno)s ' + 'funcname=%(funcName)s %(message)s'), 'datefmt': '%Y-%m-%d %H:%M:%S' }, 'simple': { 'format': '%(levelname)s %(message)s' } }, 'handlers': { 'null': { 'level': 'DEBUG', 'class': 'logging.NullHandler', }, 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'verbose' } }, 'loggers': { 'testlogger': { 'handlers': ['console'], 'level': 'INFO', } } } 

Затем, как это использовать. В этом простом случае вы можете сделать следующее в любом другом файле в проекте Django, чтобы записать этот конкретный регистратор, который мы определили ( testlogger ). Помните, что по определению регистратора в нашем файле настроек будет выводиться сообщение INFO или выше.

 import logging logger = logging.getLogger('testlogger') logger.info('This is a simple log message') 

Вам необходимо «активировать» ваших регистраторов вручную. Вы можете сделать это для каждого модуля, например, «blog.views». Он подберет подмодули, поэтому для регистрации всего приложения для блога просто введите «блог».

Если вы оставите его пустым, он будет регистрировать все, что не обрабатывалось до и с распространением = True (не по умолчанию). Это также будет записывать все Django, что означает, что на уровне отладки вы получите SQL-запросы в своих журналах.

 'loggers': { 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': False, }, 'blog.views': { 'handlers': ['console'], }, 'blog': { 'handlers': ['console'], }, '': { 'handlers': ['console'], 'level': 'DEBUG', # Not recommended. } } 
Python - лучший язык программирования в мире.