2016-01-06 55 views
0

我想將「werkzeug」輸出存儲在一個文件中(或創建一個類似的日誌文件),並將其他數據添加到每行日誌。 (例如,如果該值在會話中已知,則爲用戶名的值)燒瓶 - 如何存儲日誌並添加其他信息

如何繼續?如果用戶名在會話中未知,我希望用戶爲「未知」。

是否有可能在做app.run()之前定義所有內容?

class UserIDFilter(logging.Filter): 
    """ 
    This is a filter which injects contextual information into the log. 
    """ 
    from flask import session 
    def filter(self, record): 
     username = session.get('username','unknown') 
     record.user_id = username 
     return True 


logFormatStr = '%(asctime)s - %(levelname)s - %(message)s' 
logging.basicConfig(filename='output.log',format = logFormatStr, level=logging.DEBUG) 
app.run(debug=True) 

我對app.run問題是瞭解該計劃將如何能夠獲得(因爲我沒有嘗試使用app.run會議收到的對象時遇到了錯誤的要求方面的工作外「)訪問會話中存儲的用戶值。 (我想也許我必須在定義日誌記錄之前啓動「app.run」)。

對於我來說,最好的答案是用戶名存儲在會話和日誌文件中的Hello World示例(類似於werkzeug)添加了這些信息。

回答

0

在你的問題中有幾個問題。

對於第一個,您可以在這裏查看文檔:LoggingLogging to a File

對於第二個,您可以使用session.get('someone', 'unknown'),如果'某人'不在會話中返回'unknown',否則它只返回值。

爲最後一個。 app.run()是用來啓動一個開發服務器,你是什麼意思define everything before doing app.run()。只有錯誤可能不是很有用,顯示一些代碼並粘貼完整的錯誤日誌。

如何登錄燒瓶一個基本的例子:

from flask import Flask, session 

import logging 
from logging import Formatter, FileHandler 


app = Flask(__name__) 


@app.route('/') 
def index(): 
    user_name = session.get('Hello, world', 'unknown') 
    app.logger.debug('Say somethind here'.format(
     user_name, extra={'username': user_name})) 
    return 'Hello, {0}.'.format(user_name) 


if __name__ == '__main__': 
    file_handler = FileHandler('app.log') 
    file_handler.setLevel(logging.DEBUG) 
    file_handler.setFormatter(
     Formatter('%(asctime)s %(levelname)s %(username)s: %(message)s')) 
    app.logger.addHandler(file_handler) 
    app.run(debug=True) 

,當你運行應用程序,你會發現一個app.log文件在同一目錄,內容是:

2016-01-07 20:19:09,636 DEBUG unknown: say something here 
+0

感謝您的回答,我已經檢查了文檔,但我無法弄清楚如何在沒有「basicConfig」或在格式字符串中添加內容的情況下使其工作。在此先感謝您的幫助:) – DavidK

+0

我只是想在日誌中添加一個用戶名(在會話變量中定義的用戶名),我想了解如何。當我沒有basicConfig時,我的日誌文件中沒有任何內容。 – DavidK

+0

@DavidK更新了答案,是你想要的嗎? –