log request info in a file accessible outstide the container
authorJean-Philippe Orsini <orsinije@fr.ibm.com>
Sun, 15 Oct 2017 18:48:08 +0000 (20:48 +0200)
committerJean-Philippe Orsini <orsinije@fr.ibm.com>
Sun, 15 Oct 2017 18:48:08 +0000 (20:48 +0200)
war/run.sh
war/server.env [new file with mode: 0644]
war/server.xml
war/src/main/java/pnews/servlet/Pnews.java
war/src/main/java/pnews/servlet/RequesterLog.java [new file with mode: 0644]

index 42b1466..5a272e5 100755 (executable)
@@ -2,11 +2,22 @@
 
 SDIR=`dirname $0`
 SWAR=`realpath $SDIR/target/pnews-1.0.war`
-TMP_DIR="/tmp/$$.tmp"
-DWAR="$TMP_DIR/config/apps/pnews-1.0.war"
 
-mkdir -p $TMP_DIR/config/apps
+if [ -z "$1" ]; then
+        SHARED_DIR="/tmp/$$.tmp"
+else
+        SHARED_DIR="$1"
+fi
+
+SHARED_DIR=`realpath $SHARED_DIR`
+
+echo "SHARED_DIR=$SHARED_DIR"
+
+DWAR="$SHARED_DIR/apps/pnews-1.0.war"
+
+mkdir -p $SHARED_DIR/apps
 cp $SWAR $DWAR
-cp server.xml $TMP_DIR/config
+cp server.xml $SHARED_DIR
+cp server.env $SHARED_DIR
 
-docker run -ti --name pnews -p 9080:9080 -p 9443:9443 -v $TMP_DIR/config:/config websphere-liberty:webProfile7
+docker run -ti --name pnews -p 9080:9080 -p 9443:9443 -v $SHARED_DIR:/opt/ibm/wlp/usr/servers/defaultServer websphere-liberty:webProfile7
diff --git a/war/server.env b/war/server.env
new file mode 100644 (file)
index 0000000..beb12a4
--- /dev/null
@@ -0,0 +1 @@
+WLP_OUTPUT_DIR=/opt/ibm/wlp/usr/servers/defaultServer/output
index e800ec1..f4acbb7 100644 (file)
@@ -2,7 +2,7 @@
 <server description="Default server">
         <logging traceSpecification="pnews.*=FINEST:*=INFO"
                  consoleLogLevel="INFO"
-                 logDirectory="/tmp"
+                 logDirectory="/opt/ibm/wlp/usr/servers/defaultServer/logs"
                  maxFileSize="50"
                  traceFileName="trace.log"
                  maxFiles="10" />
index da891d1..662b47c 100644 (file)
@@ -117,6 +117,8 @@ public class Pnews extends HttpServlet {
                 String path;
                 InputStream in;
 
+                RequesterLog.singleton.writeRequest(req);
+              
                 LOG.info("doGet " + req.getRemoteAddr().toString() + " " + req.getRequestURI() + " " + req.getQueryString());
                                 
                 path = req.getPathInfo();
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);
+                }
+        }
+}