diff src/goodjava/webserver/handlers/LogHandler.java @ 1594:329197048ff0

add DailyRollingFileAppender
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 21 Mar 2021 00:59:58 -0600
parents 27efb1fcbcb5
children c78d6a4e2d9a
line wrap: on
line diff
--- a/src/goodjava/webserver/handlers/LogHandler.java	Sat Mar 20 22:29:01 2021 -0600
+++ b/src/goodjava/webserver/handlers/LogHandler.java	Sun Mar 21 00:59:58 2021 -0600
@@ -1,24 +1,72 @@
 package goodjava.webserver.handlers;
 
+import java.io.File;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import goodjava.logging.Logger;
-import goodjava.logging.LoggerFactory;
+import goodjava.logger.Layout;
+import goodjava.logger.ListLayout;
+import goodjava.logger.DateLayout;
+import goodjava.logger.Layouts;
+import goodjava.logger.Appender;
+import goodjava.logger.ConsoleAppender;
+import goodjava.logger.DailyRollingFileAppender;
+import goodjava.logger.GoodLogger;
+import goodjava.logger.Level;
+import goodjava.io.IoUtils;
 import goodjava.webserver.Handler;
 import goodjava.webserver.Request;
 import goodjava.webserver.Response;
 
 
 public final class LogHandler implements Handler {
-	private static final Logger logger = LoggerFactory.getLogger("HTTP");
+
+	public static Logger consoleLogger() {
+		Layout layout = new ListLayout(new DateLayout("yyyy-MM-dd:HH:mm:ss")," ",Layouts.MESSAGE,"\n");
+		Appender appender = new ConsoleAppender(layout,System.err);
+		GoodLogger logger = new GoodLogger("HTTP");
+		logger.appender = appender;
+		logger.level = Level.INFO;
+		return logger;
+	}
+
+	public static Logger dirLogger(File dir) {
+		if( dir.exists() && !dir.isDirectory() )
+			throw new RuntimeException("must be a directory");
+		try {
+			IoUtils.mkdirs(dir);
+		} catch(IOException e) {
+			throw new RuntimeException(e);
+		}
+		Layout layout = new ListLayout(new DateLayout("yyyy-MM-dd:HH:mm:ss")," ",Layouts.MESSAGE,"\n");
+		DateFormat fmt = new SimpleDateFormat( "'" + dir + "/'yyyy_MM_dd_HH_mm'.log'" );
+		Appender appender = new DailyRollingFileAppender(layout,fmt);
+		GoodLogger logger = new GoodLogger("HTTP");
+		logger.appender = appender;
+		logger.level = Level.INFO;
+		return logger;
+	}
 
 	private final Handler handler;
+	private final Logger logger;
 
 	public LogHandler(Handler handler) {
+		this(handler,consoleLogger());
+	}
+
+	public LogHandler(Handler handler,Logger logger) {
 		this.handler = handler;
+		this.logger = logger;
 	}
 
 	public Response handle(Request request) {
 		Response response = handler.handle(request);
-		logger.info( request.method + " " + request.path + " " + response.status.code + " " + response.body.length );
+		if( response == null )
+			return null;
+		String ip = (String)request.headers.get("x-real-ip");
+		//String agent = (String)request.headers.get("user-agent");
+		logger.info( ip + " \"" + request.method + " " + request.path + "\" " + response.status.code + " " + response.body.length );
 		return response;
 	}
 }