2016-06-27 106 views
3

我正在使用wsgi服務器爲我的Web應用程序產生服務器。我在信息記錄方面遇到問題。使用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() 

然而,在運行時,不記錄任何應用程序。我想這一定是因爲WSGI服務器,因爲app.logger在沒有WSGI的情況下工作。如何在使用WSGI時記錄信息?

回答

3

根據你需要在創建你的日誌處理對象傳遞給WSGIServer對象gevent uwsgi documentation

日誌 - 如果給定的,與寫入方法的對象,該請求(訪問)日誌將寫出來。如果沒有給出,則默認爲sys.stderr。您可以通過None來禁用請求記錄。您可以使用包裝器(例如日誌記錄)來支持不實施寫入方法的對象。 (如果你傳遞一個Logger實例,或者一般的東西,它提供了日誌的方法,但不是寫方法,這種包裝將被自動創建,它將在INFO級記錄到。)

的error_log - 如果給出,將使用write,writelines和flush方法來寫入錯誤日誌的類文件對象。如果沒有給出,則默認爲sys.stderr。您可以通過None來禁用錯誤日誌記錄(不推薦)。你可以使用一個包裝,例如日誌,來支持沒有實現正確方法的對象。此參數將成爲WSGI環境中wsgi.errors的值(如果尚未設置)。 (如日誌,用於記錄器實例之類的包裝將被自動創建,並在ERROR級別記錄到。)

所以你應該能夠做到wsgi.WSGIServer(('0.0.0.0', 8080), app, log=app.logger)

+1

應該是'登錄=應用程序。記錄器「,否則就是說'日誌對象沒有寫功能。謝謝btw! – mousecoder

+0

我會更新我的答案,請接受,如果這爲你工作! – pech0rin

相關問題