log request info in a file accessible outstide the container
[pnews.git] / war / src / main / java / pnews / servlet / RequesterLog.java
diff --git a/war/src/main/java/pnews/servlet/RequesterLog.java b/war/src/main/java/pnews/servlet/RequesterLog.java
new file mode 100644 (file)
index 0000000..48a3978
--- /dev/null
@@ -0,0 +1,32 @@
+package pnews.servlet;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class RequesterLog {
+        public static final RequesterLog singleton = new RequesterLog();
+        private Writer writer;
+        private Logger LOG = Logger.getLogger(RequesterLog.class.getName());
+        
+        public void writeRequest(HttpServletRequest rq) {          
+                try {
+                        synchronized(this) {
+                                if (writer == null)
+                                        writer = new BufferedWriter(new FileWriter("access.log", true), 1024);
+                        }
+                
+                        synchronized (writer) {
+                                writer.write(rq.getRemoteAddr() + " " + rq.getRequestURI() + " " + rq.getQueryString() + "\n");
+                                writer.flush();
+                        }
+                } catch (IOException e) {
+                        LOG.log(Level.SEVERE, "Fails to log requester information", e);
+                }
+        }
+}