Re: How to configure Access logs to ignore images
Can anyone help us in blogging in particular IP logging in tomcat access log? johnrock wrote: I have set up an Access Log in Tomcat 6. Can someone tell me how to limit access logging to only .jsp's and .html pages? I have read numerous posts and it is amazing how many responses there are to similiar questions that all point to the 'condition' parameter documentation...which I have thoroughly read. Checking the ServletRequest for a null attribute, however, does not intuitively appear to be applicable to filtering requests that are logged based on file extension. Can this be done withouth re-writing your application to specifically pass parameters just to trigger logging? If so, could someone offer an example? Thanks! Host name=localhost appBase=webapps unpackWARs=true autoDeploy=false xmlValidation=false xmlNamespaceAware=false Valve className=org.apache.catalina.valves.FastCommonAccessLogValve directory=logs/access prefix=access_log. suffix=.txt pattern=common resolveHosts=false/ /Host -- View this message in context: http://old.nabble.com/How-to-configure-Access-logs-to-ignore-images-tp23714046p31567407.html Sent from the Tomcat - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: How to configure Access logs to ignore images
Simpler version ... (Writing this without enough coffee in my system so the spirit is right, the logic might be iffy) - but in a nutshell - You don't need to map to forward, error, include - just the incoming request - You should be able to check the response type doFilter(req, resp, chain) { chain.doFilter(req, resp); if (resp.getContentType().startsWith(image/)) { request.setAttribute(dlog,t); } else if (resp.getContentType().startsWith(audio/)) { request.setAttribute(dlog,t); } /* ... */ } filter filter-nameLoggingFilter/filter-name filter-classcom.mg.filters.LoggingFilter/filter-class init-param param-namelogParam/param-name param-valuedLog/param-value /init-param /filter filter-mapping filter-nameLoggingFilter/filter-name url-pattern/*/url-pattern /filter-mapping For bonus points - you could even do either of the following so its more configurable: doFilter(req, resp, chain) { chain.doFilter(req, resp); String p = filterConfig.getInitParameter(pattern); if (resp.getContentType().matches(p)) { request.setAttribute(dlog,t); } /* ... */ } Of course - you could go the codeless route and use http://tuckey.org/urlrewrite/manual/3.0/ to set the attribute too. -Tim johnrock wrote: Thanks for your help. I do understand now the concept. I am quite surprised however how much code it actually took. Here is my filter configuration that is working correctly. This configuration basically filters out everything I don't want in my access logs, including a couple of redundant frameset pages that I do not want to count. LoggingFilter.java is the filter class that adds a parameter to the request object of any page it processes. The tomcat accesslogvalve then only logs requests that do not have the dLog parameter: LoggingFilter.java: package com.mg.filters; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public final class LoggingFilter implements Filter { private FilterConfig filterConfig = null; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setAttribute(filterConfig.getInitParameter(logParam),t); chain.doFilter(request, response); } public void destroy() { this.filterConfig = null; } public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; } } Tomcat server.xml: Valve className=org.apache.catalina.valves.FastCommonAccessLogValve directory=logs prefix=access_log. suffix=.txt pattern=common resolveHosts=false condition=dLog / web.xml: !-- The following url patterns will not be written to the access logs -- filter filter-nameLoggingFilter/filter-name filter-classcom.mg.filters.LoggingFilter/filter-class init-param param-namelogParam/param-name param-valuedLog/param-value /init-param /filter filter-mapping filter-nameLoggingFilter/filter-name url-pattern/images/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/css/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/js/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/audio/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/dwr/*/url-pattern dispatcherREQUEST/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern//url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/index.html/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/talk.htm/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/core.htm/url-pattern dispatcherREQUEST/dispatcher
Re: How to configure Access logs to ignore images
Thanks Tim. Your bonus point approach is quite slick and tidy..I am quite tempted to go that route. Of course that now begs me to overthink this and wonder if there is any performance difference between having the web.xml filter-mapping do the logic or embedding that logic in the filter itself... -- View this message in context: http://www.nabble.com/How-to-configure-Access-logs-to-ignore-images-tp23714046p23729600.html Sent from the Tomcat - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: How to configure Access logs to ignore images
From: johnrock [mailto:johnpi...@yahoo.com] Subject: How to configure Access logs to ignore images Checking the ServletRequest for a null attribute, however, does not intuitively appear to be applicable to filtering requests that are logged based on file extension. Perhaps you're interpreting this backwards. You should be able to write a filter that gets called for whatever you don't want logged (*.jpg, *.css, etc.), and have that filter set some appropriate attribute in the request, and configure that attribute in the AccessLogValve. Alternatively, have the filter called for everything, and set the attribute unless it's an item you do want logged. - Chuck THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: How to configure Access logs to ignore images
Thanks for your help. I do understand now the concept. I am quite surprised however how much code it actually took. Here is my filter configuration that is working correctly. This configuration basically filters out everything I don't want in my access logs, including a couple of redundant frameset pages that I do not want to count. LoggingFilter.java is the filter class that adds a parameter to the request object of any page it processes. The tomcat accesslogvalve then only logs requests that do not have the dLog parameter: LoggingFilter.java: package com.mg.filters; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public final class LoggingFilter implements Filter { private FilterConfig filterConfig = null; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setAttribute(filterConfig.getInitParameter(logParam),t); chain.doFilter(request, response); } public void destroy() { this.filterConfig = null; } public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; } } Tomcat server.xml: Valve className=org.apache.catalina.valves.FastCommonAccessLogValve directory=logs prefix=access_log. suffix=.txt pattern=common resolveHosts=false condition=dLog / web.xml: !-- The following url patterns will not be written to the access logs -- filter filter-nameLoggingFilter/filter-name filter-classcom.mg.filters.LoggingFilter/filter-class init-param param-namelogParam/param-name param-valuedLog/param-value /init-param /filter filter-mapping filter-nameLoggingFilter/filter-name url-pattern/images/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/css/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/js/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/audio/*/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/dwr/*/url-pattern dispatcherREQUEST/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern//url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/index.html/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/talk.htm/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping filter-mapping filter-nameLoggingFilter/filter-name url-pattern/core.htm/url-pattern dispatcherREQUEST/dispatcher dispatcherINCLUDE/dispatcher dispatcherFORWARD/dispatcher dispatcherERROR/dispatcher /filter-mapping Any comments or suggestions on this approach? I am not sure if it is neccessary to include all of those dispatcher elements, but it seems to me like it would be necessary to be complete... -- View this message in context: http://www.nabble.com/How-to-configure-Access-logs-to-ignore-images-tp23714046p23716977.html Sent from the Tomcat - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org