2013-09-27 1 views
1

Я хочу временно включить отладочные сообщения в веб-проекте pyramid, поэтому я скорректировал файл production.ini, нажал его на Heroku и увидел только сообщения об ошибках и предупреждениях.Почему мой уровень журнала не используется при использовании loadapp из файла paste.deploy?

Так что я подумал, что это кажется странным, поскольку, если я запустил приложение пирамиды, как показано на моем локальном ПК, я получаю все сообщения уровня журнала.

env/bin/pserve production.ini 

ОК, так что это не точно, как это работает на Heroku, это на самом деле работать с little bit of python, который выглядит следующим образом (в файле runapp.py):

import os 

from paste.deploy import loadapp 
from waitress import serve 

if __name__ == "__main__": 
    port = int(os.environ.get("PORT", 5000)) 
    app = loadapp('config:production.ini', relative_to='.') 

    serve(app, host='0.0.0.0', port=port) 

Теперь, конечно, если Я делаю это на своем локальном ПК. Я получаю то же поведение, что и при его развертывании в Heroku (вряд ли удивительно).

python runapp.py 

Мой вопрос: что мне здесь не хватает? Почему его запуск во втором случае приводит к тому, что никакие сообщения журнала, кроме ERROR и WARN, не выводятся на стандартный вывод? Конечно, поскольку он использует тот же файл production.ini, он должен работать так же, как если бы я использовал процесс pserve?

Вот мой каротаж раздел из production.ini:

### 
# logging configuration 
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html 
### 

[loggers] 
keys = root, test 

[handlers] 
keys = console 

[formatters] 
keys = generic 

[logger_root] 
level = DEBUG 
handlers = console 

[logger_test] 
level = DEBUG 
handlers = console 
qualname = test 

[handler_console] 
class = StreamHandler 
args = (sys.stderr,) 
level = DEBUG 
formatter = generic 

[formatter_generic] 
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s 

ответ

4

PasteDeploy фактически не берет на себя ответственность за ведение журнала настройки. Это небольшая причуда, когда файл INI имеет двойное назначение. Есть разделы, которые PasteDeploy заботится, и есть разделы, которые logging.config.fileConfig заботится, и оба должны запускаться для полной загрузки INI-файла.

Если следовать пирамиды оберток для делать это, вы могли бы сделать:

pyramid.paster.setup_logging(inipath) 
pyramid.paster.get_app(inipath) 

Основная причина, вы бы использовать их вместо того, чтобы делать это самостоятельно, что они поддерживают делать «правильные вещи», когда inipath содержит спецификатор раздела, такой как development.ini#myapp, который fileConfig рухнул бы.

+0

отлично, спасибо - это просто работа. Я заменил строку: «from paste.deploy import loadapp» с «import pyramid.paster» и «app = loadapp ('config: production.ini», relative_to ='. ')' Линия с двумя, которые вы мне дали (просто переходя в «production.ini» для них), и он отлично работает и применяет мой журнал, поэтому я счастливый кролик :-). – kmp