Mercurial Hosting > luan
changeset 1594:329197048ff0
add DailyRollingFileAppender
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 21 Mar 2021 00:59:58 -0600 |
parents | ea62c2316b2e |
children | e4deb32bd233 |
files | src/goodjava/logger/DailyRollingFileAppender.java src/goodjava/logger/GoodLogger.java src/goodjava/webserver/handlers/LogHandler.java |
diffstat | 3 files changed, 85 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/goodjava/logger/DailyRollingFileAppender.java Sun Mar 21 00:59:58 2021 -0600 @@ -0,0 +1,32 @@ +package goodjava.logger; + +import java.io.FileWriter; +import java.io.IOException; +import java.text.DateFormat; +import java.util.Date; + + +public final class DailyRollingFileAppender extends WriterAppender { + private final DateFormat format; + private String fileName; + + public DailyRollingFileAppender(Layout layout,DateFormat format) { + super(layout,null); + this.format = format; + } + + public synchronized void append(LoggingEvent event) { + String newFileName = format.format(new Date()); + if( !newFileName.equals(fileName) ) { + fileName = newFileName; + if( writer != null ) + close(); + try { + writer = new FileWriter(fileName,true); + } catch(IOException e) { + throw new RuntimeException(e); + } + } + super.append(event); + } +}
--- a/src/goodjava/logger/GoodLogger.java Sat Mar 20 22:29:01 2021 -0600 +++ b/src/goodjava/logger/GoodLogger.java Sun Mar 21 00:59:58 2021 -0600 @@ -8,7 +8,7 @@ public volatile int level; public volatile Appender appender; - GoodLogger(String name) { + public GoodLogger(String name) { this.name = name; } @@ -61,6 +61,6 @@ } private boolean isEnabled(int level) { - return true; + return level >= this.level; } }
--- 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; } }