我有一个项目,我正在解析 Tomcat 日志以获取有用信息。起初,该程序非常简单,只需一个 grep 即可轻松完成。然而,一旦意识到这些信息可能有用,我就被要求进行越来越复杂的解析。
到了我想将日志条目的通用信息存储在数据库中的地步,然后进行各种查询以获取自定义报告。这些信息中的大部分都相当直接且易于解析。
- 有IP地址和代理地址。例如,我现在有一个包含 10,000 个 IP 地址的列表,这些 IP 地址来自我们聘请来测试我们的应用程序安全性的公司。因此,我们希望在任何报告中忽略来自这些 IP 地址的条目。
- 有会话 ID:我需要一份报告,其中用户在页面“B”之前转到页面“A”,但不是在访问页面“C”之后。会话 ID 允许我跟踪此行为。
- 有时间和日期。
- 有 HTTP 响应代码。
- 这是否是 GET 或 POST 操作。
- 有网页本身(以及通过 GET 传递的可能值)。
而且,最后是用户代理混乱......我的意思是用户代理字符串。
用户代理字符串似乎有一个相当松散的布局。例如,其中 99%Mozilla/4.0
都是从浏览器开始的,而这些浏览器与 Mozilla、Netscape 或 Firefox 无关,甚至不使用 Gecko 布局引擎。
不幸的是,用户代理字符串在我们的报告中变得相当重要。例如,我们需要知道有多少人在使用 Safari 或使用任何移动浏览器,或者使用基于 Linux 的系统、Windows 和 iOS。
最大的问题是我不知道将来可能会要求什么,所以我不能 100% 确定哪些信息有用,哪些信息没用(看起来我们 99.7% 的用户正在使用 Mozilla 4.0 浏览器!)。
那么,您将如何解析用户代理字符串并提取我可以生成报告的有用信息?