如何在Flask控制台请求日志中添加UserAgent信息
如何在Flask应用控制台请求日志中添加UserAgent信息
Flask默认的开发服务器日志不会显示UserAgent,要把它加进去,有两种常用方法:
方法一:修改Werkzeug的默认日志格式
Flask的请求日志由Werkzeug处理,直接修改它的日志格式就能把UserAgent嵌入默认日志行里:
from flask import Flask from werkzeug.serving import WSGIRequestHandler # 自定义日志格式,新增%(a)s字段(对应User-Agent) WSGIRequestHandler.log_format = '%(h)s - - %(t)s "%(r)s" %(s)s %(b)s "%(a)s"' app = Flask(__name__) @app.route('/rentaldb.ics') def generate_ics(): # 这里写你的业务逻辑 return "ICS文件内容", 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=8081)
格式说明:
%(h)s: 请求客户端IP%(t)s: 请求时间%(r)s: 请求行(如GET /rentaldb.ics HTTP/1.1)%(s)s: 响应状态码%(b)s: 响应字节数%(a)s: 请求的User-Agent信息
修改后控制台日志会变成这样:
64.227.xx.xx - - [08/Nov/2024 18:55:44] "GET /rentaldb.ics HTTP/1.1" 200 - "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
方法二:用装饰器单独记录UserAgent
如果不想改动全局日志格式,也可以给路由加装饰器,单独打印包含UserAgent的日志:
from flask import Flask, request import logging app = Flask(__name__) # 初始化日志配置 logging.basicConfig(level=logging.INFO) def log_user_agent(func): def wrapper(*args, **kwargs): # 获取UserAgent,默认值设为Unknown user_agent = request.headers.get('User-Agent', 'Unknown') # 打印自定义日志 app.logger.info(f"{request.remote_addr} - 请求: {request.method} {request.path} - UserAgent: {user_agent}") return func(*args, **kwargs) return wrapper @app.route('/rentaldb.ics') @log_user_agent def generate_ics(): return "ICS文件内容", 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=8081)
这种方式会在默认日志之外,额外输出一条带UserAgent的日志,适合需要单独追踪UserAgent的场景。
内容的提问来源于stack exchange,提问作者Artem
相关产品推荐
相关产品推荐

