001package runwar.util; 002 003import java.io.IOException; 004import java.util.Enumeration; 005import java.util.logging.FileHandler; 006import java.util.logging.Level; 007import java.util.logging.Logger; 008import java.util.logging.SimpleFormatter; 009 010import javax.servlet.ServletConfig; 011import javax.servlet.ServletRequest; 012import javax.servlet.ServletResponse; 013import javax.servlet.http.HttpServletRequest; 014/** 015 * A simple request logger 016 <rule enabled="true"> 017 <name>railoLocalOnly</name> 018 <note>Only allow access to railo admin from localhost</note> 019 <condition operator="notequal" type="remote-addr">127\.0\.0\.1|0:0:0:0:0:0:0:1%0</condition> 020 <run class="runwar.LogRequest"> 021 <init-param> 022 <param-name>logLevel</param-name> 023 <param-value>SEVERE</param-value> 024 </init-param> 025 <init-param> 026 <param-name>logFilePath</param-name> 027 <param-value>./requests.log</param-value> 028 </init-param> 029 </run> 030 <from casesensitive="false">^/(railo-context/admin/|tests|CFIDE/administrator/|bluedragon/administrator).*</from> 031 <to last="true" type="redirect">/</to> 032 </rule> 033 Good examples of logging configurations: 034 http://www.exampledepot.com/egs/java.util.logging/pkg.html 035 */ 036public class LogRequest { 037 038 private String logLevel; 039 private String logFilePath; 040 static final Logger log = Logger.getLogger(LogRequest.class.getName()); 041 042 public void run(ServletRequest request, ServletResponse response) { 043 if (logLevel != null) { 044 HttpServletRequest httpRequest = (HttpServletRequest) request; 045 String remoteAddress = request.getRemoteAddr(); 046 String uri = httpRequest.getRequestURI(); 047 String protocol = request.getProtocol(); 048 String logString = "*URI*:" + uri + " *REMOTEADDRESS*:" + remoteAddress + " *PROTOCOL*: " + protocol + " *METHOD*:" + httpRequest.getMethod() + " "; 049 Enumeration<?> headerNames = httpRequest.getHeaderNames(); 050 while(headerNames.hasMoreElements()) { 051 String headerName = (String)headerNames.nextElement(); 052 logString += headerName.toUpperCase() + ": "; 053 logString += httpRequest.getHeader(headerName) + " "; 054 } 055 log.log(Level.parse(logLevel),logString); 056 } 057 } 058 059 public void init(ServletConfig config) { 060 this.logLevel = config.getInitParameter("logLevel"); 061 this.logFilePath = config.getInitParameter("logFilePath"); 062 boolean append = true; 063 FileHandler handler; 064 try { 065 handler = new FileHandler(this.logFilePath, append); 066 handler.setFormatter(new SimpleFormatter()); 067 log.addHandler(handler); 068 } catch (SecurityException e) { 069 // TODO Auto-generated catch block 070 e.printStackTrace(); 071 } catch (IOException e) { 072 // TODO Auto-generated catch block 073 e.printStackTrace(); 074 } 075 // Add to the desired logger 076 } 077 078 public void destroy() { 079 } 080 081}