Apache access_log 的 User-Agent 字段可统计浏览器分布占比,需确保LogFormat含"%{User-Agent}i",Java解析时用正则提取UA并按Edg/、Firefox/、Safari/(不含Chrome)、Chrome/等优先级识别,过滤爬虫后计算各浏览器百分比。

Apache 的 access_log 记录了每次 HTTP 请求的详细信息,其中 User-Agent 字段包含了客户端浏览器类型、版本、操作系统等关键数据。通过解析该字段,可以统计出访问网站的用户使用的浏览器分布占比。
确认日志中包含 User-Agent 字段
默认 Apache 日志格式(如 combined)已包含 User-Agent。检查你的 httpd.conf 或 apache2.conf 中的 LogFormat 配置:
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined确保日志行末尾有 "%{User-Agent}i",否则需修改并重启 Apache。
用 Java 解析 access_log 并提取浏览器信息
核心思路是逐行读取日志,用正则匹配 User-Agent 字符串,再根据常见标识识别浏览器。注意:User-Agent 格式多样,需按优先级判断(例如 Chrome 和 Edge 都含 Edg 或 Chrome,应先匹配更具体的):
立即学习“Java免费学习笔记(深入)”;
- 使用
Files.lines(Paths.get("access_log"))流式读取,避免内存溢出 - 用正则
"\"([^\"]*)\"$"提取行末的 User-Agent(假设为 combined 格式) - 按顺序判断 UA 字符串:先查
Edg/(Edge)、Firefox/、Safari/且不含Chrome(排除 Chrome 冒充)、Chrome/、Opera/或OPR/、最后归为Other - 统计时忽略空值或明显爬虫 UA(如含
bot、curl、wget,可选)
输出浏览器占比(示例代码逻辑)
统计后用 Map<string long></string> 存各浏览器出现次数,再遍历计算百分比(保留两位小数):
total = counts.values().stream().mapToLong(Long::longValue).sum();
counts.forEach((browser, count) ->
System.out.printf("%-12s: %.2f%%\n", browser, (double) count / total * 100)
);典型输出可能为:
Chrome : 62.35%
Edge : 15.21%
Safari : 9.87%
Firefox : 8.44%
Other : 4.13%
进阶建议:支持多日志 & 基础可视化
若需分析多天日志,可用 FileVisitor 遍历 access_log* 文件(包括 access_log.1.gz);解压后合并处理。
如需简单图表,可导出 CSV 后用 Excel 打开,或集成 JFreeChart 生成饼图——但生产环境更推荐用 ELK(Elasticsearch + Logstash + Kibana)或 Grafana + Loki 自动化分析。


















