我们正在使用 Apache Tomcat 7 并尝试设置 Valve 组件来存储我们的访问日志,以便在SnowPlow中进行处理。
我们遇到的问题是如何使这些日志变得健壮。举个例子 - 我们可以用标签分隔字段并提取用户代理字符串,如下所示:
pattern="%{yyyy-MM-dd}t	%{hh:mm:ss}t	%{User-Agent}i	"
问题是 Valve 组件没有(据我所知) escape %{User-Agent}i
,所以用户代理中的杂散选项卡会破坏数据(行看起来包含四个字段,而不是三个)。
至于解决方案,除非有办法逃避我错过的用户代理,否则我可以看到几个解决方案:
- 使用不太可能出现在用户代理字符串中的非常模糊的字段分隔符(或字段分隔符的组合)。我们尝试了 Ctrl-A (HTML

?) 但这似乎不起作用 - 编写一个
AccessLogValve
支持转义或清理选项卡的自定义 - 可能类似于这篇文章Sanitizing Tomcat access log entries
有点困惑,我在网上找不到关于这个的任何其他信息 - 没有人解析他们的 Tomcat 访问日志吗?
你有什么建议吗?我们有点卡住了...