从tomcat 7中的访问日志中过滤出image / css / js请求

时间:2014-09-08 22:54:39

标签: tomcat

我试图从我的访问日志中过滤掉任何图像/ css / js请求。我创建了一个过滤器(LoggingFilter)并在server.xml中设置了conditionUnless属性,但我必须缺少一个步骤,因为对image / css / js文件的请求仍然显示在日志中。有人能给我一个关于我失踪的提示吗?

这是代码 -

LoggingFilter.java

public class LoggingFilter实现Filter {

@Override 
public void init(FilterConfig filterConfig) throws ServletException 
{ 

} 

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
{ 
    chain.doFilter(request, response); 
    if(response.getContentType() != null) 
    { 
        if (response.getContentType().contains("image") || 
                response.getContentType().contains("css") || 
                response.getContentType().contains("javascript")) 
        { 
            request.setAttribute("doNotLog", "noLog"); 
        } 
    } 
} 

@Override 
public void destroy() 
{ 

} 

}

这是我在web.xml中的内容

<filter>
     <filter-name>LoggingFilter</filter-name>
     <filter-class>com.shop.famos.filters.LoggingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

在tomcat设置中我有 -

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" conditionUnless="doNotLog" pattern="common"/>
是的,我正在使用tomcat 7

另外,想提一下我确实看到了这篇文章Tomcat 7: Filter access log,其中说明必须继承&#34; org.apache.catalina.valves.AccessLogValve&#34;实现更具体的过滤器。这是唯一的方法吗?或者可以使用我上面的过滤器来实现吗?

谢谢,

埃德

1 个答案:

答案 0 :(得分:2)

终于找到了我失踪的那一步。我从亚马逊“Apache Tomcat 7”中挑选了一本好书,这让我意识到Tomcat拥有自己的内置过滤器,可用于检查和修改传入的请求。最初我将我的过滤器作为我的web项目的一部分,这没有用,因为我的过滤器需要在服务器级别,以便我设置的请求属性将被访问日志看到。

所以基本上我将我的编译类放在一个jar中并将它放在Tomcat的类路径中,将我的过滤器定义和映射放在Tomcat的web.xml文件中,重新启动Tomcat并转到我站点的主页并确定任何请求对于js,图像或css文件没有在日志中结束。