Flask - 如何存储日志和添加其他信息

时间:2016-01-06 12:04:30

标签: python logging web-applications flask flask-login

我想存储" werkzeug"输出文件(或创建类似的日志文件)并向每行日志添加其他数据。 (例如,如果会话中已知值,则为用户名的值)

如何进行?我希望用户成为"未知"如果会话中未知用户名。

在执行app.run()之前是否可以定义所有内容? (因为我在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")

对我来说,最好的答案是Hello World示例,其中存储在会话中的用户名和添加了该信息的日志文件(类似于werkzeug)。

1 个答案:

答案 0 :(得分:1)

你的问题有几个问题。

对于第一个,您可以在此处查看文档:{​​{3}}和Logging

对于第二个,您可以使用00007FF8CE9F2890 ?? ?? 00007FF8CE9F2891 ?? ?? 00007FF8CE9F2892 ?? ?? 00007FF8CE9F2893 ?? ?? 00007FF8CE9F2894 ?? ?? ,返回'未知'如果有人'不在会话中,否则它只返回值。

表示最后一个。 session.get('someone', '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