我尝试使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文档中的工作示例和/或更详细的说明。
有人可以帮助我提供有关如何排除以下内容的示例和/或指示:
绝对地,我已经填写了&#34; / abc /.*"作为conditionUnless(代替questionmarks)的值,但是没有做任何事情。
答案 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 "%r" %s %b %Ts %{uid}r "%{User-Agent}i"" />
我使用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);
}
}
}