gpt4 book ai didi

tomcat - 有条件地过滤 Tomcat AccessLogValve

转载 作者:行者123 更新时间:2023-11-28 22:29:02 25 4
gpt4 key购买 nike

我尝试让 Tomcat 有条件地跳过日志记录,因此访问日志不会充满大量本地应用程序到应用程序的通信条目。

目前我在 server.xml 中有以下内容:

<Valve className="org.apache.catalina.valves.RemoteIpValve" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log/alfresco"
prefix="tomcat.access." suffix=".log" conditionUnless="???" pattern="combined" />

如您所见,我使用 RemoteIpValve 来显示 X-Forwarded-For 值,而不是本地 IP。但是要过滤实际的日志记录,我可以看到我可以在 Tomcat >7.0.30(我使用的)中使用“conditionUnless”。但是经过大量搜索,我找不到任何工作示例和/或比 Tomcat 文档中有关此 Valve (https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve) 更详细的说明。

谁能帮我举个例子和/或指导我如何排除以下内容:

  1. 来自 IP“127.0.0.1”和/或的所有内容
  2. 应用程序的所有流量/相对 URL:“/abc/.*”

不幸的是,我已经填写了“/abc/.*”作为 conditionUnless 的值(在问号的位置),但这并没有做任何事情。

最佳答案

很简单!

只需编辑 server.xml,这是我的:

    <Valve className="org.apache.catalina.valves.RemoteIpValve" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" conditionUnless="junk"
pattern="%{x-forwarded-for}i %l %u %t &quot;%r&quot; %s %b %Ts %{uid}r &quot;%{User-Agent}i&quot;" />

我使用 apache mod 代理,所以我想用用户的实际 ip 地址替换所有 127.0.0.1 调用。我还想将用户 ID 和用户代理添加到日志中。随心所欲地自定义它,随心所欲地显示它。所有 % 内容的文档都在这里:

https://tomcat.apache.org/tomcat-8.5-doc/api/org/apache/catalina/valves/AbstractAccessLogValve.html

问题的关键在于:conditionUnless="junk" 这就是您需要添加到 server.xml 中的 AccessLogValve Valve 配置的所有内容 让它工作。

然后你要做的就是创建一个过滤器,或者在你的servlet、jsp页面等你想要过滤掉的地方,你只需要添加下面的代码:

    request.setAttribute("junk", true);

例如:

class JunkFilter extends OncePerRequestFilter {

public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
String originalUri = request.getRequestURI()
if (originalUri.indexOf("/abc/") != -1) {
request.setAttribute("junk", true);
}
if (request.getHeader('x-forwarded-host').indexOf("127.0.0.1") != -1) {
request.setAttribute("junk", true);
}
}
}

注册过滤器,一切就绪!

如果你想要奖励积分,将用户id添加到日志中:

    request.setAttribute("uid", user == null? "anon" : user.id)

关于tomcat - 有条件地过滤 Tomcat AccessLogValve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347764/

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