有条件地过滤Tomcat AccessLogValve

时间:2015-03-30 13:40:48

标签: tomcat server.xml

我尝试使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。 但是为了过滤实际的日志记录,我可以看到我可以使用&条件无效&#39;在Tomcat&gt; 7.0.30(我使用)。但经过大量搜索后,我找不到任何有关此Valve(https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve)的Tomcat文档中的工作示例和/或更详细的说明。

有人可以帮助我提供有关如何排除以下内容的示例和/或指示:

  1. 一切都来自IP&#34; 127.0.0.1&#34;和/或
  2. 应用程序/相对URL的所有流量:&#34; / abc /.*"
  3. 绝对地,我已经填写了&#34; / abc /.*"作为conditionUnless(代替questionmarks)的值,​​但是没有做任何事情。

1 个答案:

答案 0 :(得分:0)

很简单!

只需编辑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"这就是您需要在AccessLogValve的{​​{1}} Valve配置中添加的所有内容,才能使其正常工作。

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

server.xml

例如:

    request.setAttribute("junk", true);

注册过滤器,一切就绪!

如果您想获得奖励积分,请将用户ID添加到日志中:

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);
        }
    }
}