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}