gpt4 book ai didi

http - 如何使用 Apache Tomcat Valve Component 创建可靠的访问日志?

转载 作者:可可西里 更新时间:2023-11-01 15:29:54 25 4
gpt4 key购买 nike

我们正在使用 Apache Tomcat 7 并尝试设置 Valve 组件来存储我们的访问日志,准备在 SnowPlow 中处理.

我们面临的问题是如何使这些日志健壮。举个例子——我们可以用制表符分隔字段并提取用户代理字符串,如下所示:

pattern="%{yyyy-MM-dd}t	%{hh:mm:ss}t	%{User-Agent}i	"

问题是 Valve 组件没有(据我所知)转义 %{User-Agent}i,因此用户代理中的杂散选项卡将破坏数据(行将看起来它包含四个字段,而不是三个)。

就解决方案而言,除非有一种方法可以逃避我错过的用户代理,否则我可以看到几个解决方案:

  1. 使用不太可能出现在用户代理字符串中的非常晦涩的字段分隔符(或字段分隔符的组合)。我们尝试了 Ctrl-A(HTML ?),但这似乎不起作用
  2. 编写自定义 AccessLogValve,它支持转义或清理选项卡 - 可能类似于这篇文章 Sanitizing Tomcat access log entries

有点困惑,我在网上找不到关于此的任何其他信息 - 没有人解析他们的 Tomcat 访问日志吗?

您有什么建议?我们有点卡住了...

最佳答案

RFC2616将用户代理字符串定义为

User-Agent     = "User-Agent" ":" 1*( product | comment )

然后产品定义为

product         = token ["/" product-version]
product-version = token

在此之后, token 被定义为

token          = 1*<any CHAR except CTLs or separators>

和分隔符/CTL 作为

separators     = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>

我们不要忘记comment,它定义为

comment    = "(" *( ctext | quoted-pair | comment ) ")" 
ctext = <any TEXT excluding "(" and ")">
quoted-pair = "\" CHAR
CHAR = <any US-ASCII character (octets 0 - 127)>

所以如果我理解正确的话,你应该可以使用任何separator或者CTL,只要你能区分comment,这是包装在 () 中。如果 ( 出现在注释中,应该使用 \ 进行转义。

关于http - 如何使用 Apache Tomcat Valve Component 创建可靠的访问日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13601489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com