You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:25:09