2016-06-27 10 views
3

Я использую сервер wsgi для запуска серверов для моего веб-приложения. У меня проблема с регистрацией информации.Регистрация с использованием WSGI-сервера и флеш-приложения

Это, как я бегу приложение

from gevent import monkey; monkey.patch_all() 
from logging.handlers import RotatingFileHandler 
import logging 
from app import app # this imports app 

# create a file to store weblogs 
log = open(ERROR_LOG_FILE, 'w'); log.seek(0); log.truncate(); 
log.write("Web Application Log\n"); log.close(); 

log_handler = RotatingFileHandler(ERROR_LOG_FILE, maxBytes =1000000, backupCount=1) 

formatter = logging.Formatter(
    "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s" 
    ) 
log_handler.setFormatter(formatter) 
app.logger.setLevel(logging.DEBUG) 
app.logger.addHandler(log_handler) 

# run the application 
server= wsgi.WSGIServer(('0.0.0.0', 8080), app) 
server.serve_forever() 

Однако при запуске приложения оно ничего не Logging. Я думаю, это должно быть из-за WSGI-сервера, потому что app.logger работает в отсутствии WSGI. Как я могу регистрировать информацию при использовании WSGI?

ответ

3

Согласно gevent uwsgi documentation вам нужно передать свой лог объект обработчика для объекта WSGIServer при создании:

журнала - Если есть, объект с помощью метода записи, к которому запрос (доступ) Лог быть написано. Если не указано, по умолчанию используется sys.stderr. Вы можете передать None, чтобы отключить ведение журнала запросов. Вы можете использовать обертку, например, для ведения журнала, для поддержки объектов, которые не реализуют метод записи. (Если передать экземпляр Logger, или вообще что-то, что обеспечивает метод журнала, но не метод записи, такая обертка будет автоматически создана и будет регистрироваться на уровне INFO.)

error_log - Если задано, файл-подобный объект с методами записи, писем и флеша, в который будут записываться журналы ошибок. Если не указано, по умолчанию используется sys.stderr. Вы можете передать None, чтобы отключить ведение журнала ошибок (не рекомендуется). Вы можете использовать обертку, например, для ведения журнала, для поддержки объектов, которые не реализуют надлежащие методы. Этот параметр станет значением wsgi.errors в среде WSGI (если он еще не установлен). (Как и в журнале, обертки для экземпляров Logger и т.п., будут созданы автоматически и регистрируются в на уровне ОШИБОК.)

так что вы должны быть в состоянии сделать wsgi.WSGIServer(('0.0.0.0', 8080), app, log=app.logger)

+1

должны быть 'войти = приложение. logger', иначе он говорит, что «объект журнала не имеет функции записи». Спасибо, btw! – mousecoder

+0

Я обновлю свой ответ, примите, если это сработало для вас! – pech0rin