Mercurial Hosting > luan
changeset 1332:11b7e11f9ed5
cleaner logging
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 12 Feb 2019 21:50:26 -0700 |
parents | 02fe660e7748 |
children | 25746915a241 |
files | conv.txt src/luan/host/WebHandler.java src/luan/host/init.luan src/luan/modules/http/LuanDomainHandler.java src/luan/modules/http/LuanHandler.java src/luan/modules/logging/Log4j.java src/luan/modules/logging/Log4j.luan src/luan/modules/logging/Logging.luan src/luan/modules/logging/LuanLogger.java |
diffstat | 9 files changed, 116 insertions(+), 87 deletions(-) [+] |
line wrap: on
line diff
--- a/conv.txt Mon Feb 11 02:17:41 2019 -0700 +++ b/conv.txt Tue Feb 12 21:50:26 2019 -0700 @@ -1,3 +1,5 @@ +LuanLogger + file - java.* Io.unrestricted Thread.global_callable
--- a/src/luan/host/WebHandler.java Mon Feb 11 02:17:41 2019 -0700 +++ b/src/luan/host/WebHandler.java Tue Feb 12 21:50:26 2019 -0700 @@ -15,7 +15,7 @@ import luan.LuanClosure; import luan.modules.BasicLuan; import luan.modules.http.LuanHandler; -import luan.modules.logging.LuanLogger; +import luan.modules.logging.Log4j; public class WebHandler implements Handler { @@ -41,7 +41,7 @@ LuanState luan = new LuanState(); try { - LuanLogger.newLoggerRepository(luan); + Log4j.newLoggerRepository(luan); } catch(LuanException e) { throw new RuntimeException(e); }
--- a/src/luan/host/init.luan Mon Feb 11 02:17:41 2019 -0700 +++ b/src/luan/host/init.luan Tue Feb 12 21:50:26 2019 -0700 @@ -12,12 +12,12 @@ if logging then java() - local LuanLogger = require "java:luan.modules.logging.LuanLogger" + local Log4j = require "java:luan.modules.logging.Log4j" local Level = require "java:org.apache.log4j.Level" local EnhancedPatternLayout = require "java:org.apache.log4j.EnhancedPatternLayout" local RollingFileAppender = require "java:org.apache.log4j.RollingFileAppender" - local logger = LuanLogger.getRootLogger() + local logger = Log4j.getRootLogger() logger.removeAllAppenders() local layout = EnhancedPatternLayout.new("%d %-5p %c - %m%n") local log_dir = dir.."/site/private/local/logs/"
--- a/src/luan/modules/http/LuanDomainHandler.java Mon Feb 11 02:17:41 2019 -0700 +++ b/src/luan/modules/http/LuanDomainHandler.java Tue Feb 12 21:50:26 2019 -0700 @@ -8,7 +8,7 @@ import luan.LuanTable; import luan.LuanCloner; import luan.LuanException; -import luan.modules.logging.LuanLogger; +import luan.modules.logging.Log4j; public class LuanDomainHandler implements Handler, DomainHandler.Factory { @@ -26,11 +26,15 @@ return new LuanHandler(luan); } + protected void newLoggerRepository(LuanState luan) throws LuanException { + Log4j.newLoggerRepository(luan); + } + protected LuanState newLuan(String domain) { LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); LuanState luan = (LuanState)cloner.clone(luanInit); try { - LuanLogger.newLoggerRepository(luan); + newLoggerRepository(luan); LuanTable Http = (LuanTable)luan.require("luan:http/Http.luan"); Http.put( "domain", domain ); } catch(LuanException e) {
--- a/src/luan/modules/http/LuanHandler.java Mon Feb 11 02:17:41 2019 -0700 +++ b/src/luan/modules/http/LuanHandler.java Tue Feb 12 21:50:26 2019 -0700 @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import org.apache.log4j.Logger; +import org.slf4j.Logger; import luan.webserver.Request; import luan.webserver.Response; import luan.webserver.Status;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/logging/Log4j.java Tue Feb 12 21:50:26 2019 -0700 @@ -0,0 +1,48 @@ +package luan.modules.logging; + +import org.apache.log4j.Logger; +import org.apache.log4j.LogManager; +import org.apache.log4j.Hierarchy; +import org.apache.log4j.Level; +import org.apache.log4j.spi.LoggerRepository; +import org.apache.log4j.spi.RootLogger; +import org.apache.log4j.spi.RepositorySelector; +import luan.LuanState; +import luan.LuanException; +import luan.LuanTable; + + +public final class Log4j { + private static String KEY = "Logger.Repository"; + + public static void newLoggerRepository(LuanState luan) throws LuanException { + LoggerRepository lr = new Hierarchy(new RootLogger(Level.DEBUG)); + luan.registry().put(KEY,lr); + LuanTable module = (LuanTable)luan.require("luan:logging/Log4j.luan"); + module.call( "init_root" ); + } + + private static final LoggerRepository defaultLoggerRepository = LogManager.getLoggerRepository(); + + private static LoggerRepository getLoggerRepository(LuanState luan) { + LoggerRepository lr = (LoggerRepository)luan.registry().get(KEY); + return lr != null ? lr : defaultLoggerRepository; + } + + static { + LogManager.setRepositorySelector( new RepositorySelector() { + public LoggerRepository getLoggerRepository() { + LuanState luan = LuanLogger.luan(); + return luan==null ? defaultLoggerRepository : Log4j.getLoggerRepository(luan); + } + }, new Object() ); + } + + public static Logger getRootLogger(LuanState luan) { + return getLoggerRepository(luan).getRootLogger(); + } + + public static Logger getLogger(LuanState luan,String name) { + return getLoggerRepository(luan).getLogger(name); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/logging/Log4j.luan Tue Feb 12 21:50:26 2019 -0700 @@ -0,0 +1,24 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +java() +local JavaLog4j = require "java:luan.modules.logging.Log4j" +local EnhancedPatternLayout = require "java:org.apache.log4j.EnhancedPatternLayout" +local ConsoleAppender = require "java:org.apache.log4j.ConsoleAppender" +local Level = require "java:org.apache.log4j.Level" + + +local Log4j = {} + +function Log4j.init_root() + local root = JavaLog4j.getRootLogger() + local has_appenders = root.getAllAppenders().hasMoreElements() + if not has_appenders then +-- root.setLevel(Level.INFO) + local layout = EnhancedPatternLayout.new("%d %-5p %c - %m%n") + local appender = ConsoleAppender.new(layout,"System.err"); + root.addAppender(appender); + end +end +Log4j.init_root() + +return Log4j
--- a/src/luan/modules/logging/Logging.luan Mon Feb 11 02:17:41 2019 -0700 +++ b/src/luan/modules/logging/Logging.luan Tue Feb 12 21:50:26 2019 -0700 @@ -1,58 +1,22 @@ -local Luan = require "luan:Luan.luan" -local error = Luan.error java() -local EnhancedPatternLayout = require "java:org.apache.log4j.EnhancedPatternLayout" -local ConsoleAppender = require "java:org.apache.log4j.ConsoleAppender" -local Level = require "java:org.apache.log4j.Level" local LuanLogger = require "java:luan.modules.logging.LuanLogger" +local Package = require "luan:Package.luan" +if Package.load("java:org.apache.log4j.Logger") ~= false then + require "luan:logging/Log4j.luan" +end + local Logging = {} -function Logging.init_root() - local root = LuanLogger.getRootLogger() - local has_appenders = root.getAllAppenders().hasMoreElements() - if not has_appenders then - root.setLevel(Level.INFO) - local layout = EnhancedPatternLayout.new("%d %-5p %c - %m%n") - local appender = ConsoleAppender.new(layout,"System.err"); - root.addAppender(appender); - end -end -Logging.init_root() - -local function to_luan_logger(log4j_logger) - local tbl = {} - - local luanLogger = LuanLogger.new(log4j_logger) - tbl.error = luanLogger.error - tbl.warn = luanLogger.warn - tbl.info = luanLogger.info - tbl.debug = luanLogger.debug - - function tbl.get_level() - local level = log4j_logger.getLevel() - return level and level.toString() - end - - function tbl.get_effective_level() - local level = log4j_logger.getEffectiveLevel() - return level and level.toString() - end - - function tbl.set_level(level) - log4j_logger.setLevel( Level.toLevel(level) ) - end - - return tbl -end - function Logging.logger(name) - return to_luan_logger( LuanLogger.getLogger(name) ) -end - -function Logging.root_logger() - return to_luan_logger( LuanLogger.getRootLogger() ) + local luan_logger = LuanLogger.new(name) + return { + error = luan_logger.error + warn = luan_logger.warn + info = luan_logger.info + debug = luan_logger.debug + } end return Logging
--- a/src/luan/modules/logging/LuanLogger.java Mon Feb 11 02:17:41 2019 -0700 +++ b/src/luan/modules/logging/LuanLogger.java Tue Feb 12 21:50:26 2019 -0700 @@ -1,22 +1,16 @@ package luan.modules.logging; -import org.apache.log4j.Logger; -import org.apache.log4j.LogManager; -import org.apache.log4j.Hierarchy; -import org.apache.log4j.Level; -import org.apache.log4j.spi.LoggerRepository; -import org.apache.log4j.spi.RootLogger; -import luan.Luan; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import luan.LuanState; import luan.LuanException; -import luan.LuanTable; public final class LuanLogger { private final Logger logger; - public LuanLogger(Logger logger) { - this.logger = logger; + public LuanLogger(LuanState luan,String name) { + this.logger = getLogger(luan,name); } public void error(LuanState luan,Object obj) throws LuanException { @@ -36,30 +30,23 @@ } - private static String KEY = "Logger.Repository"; + private static ThreadLocal<LuanState> tl = new ThreadLocal<LuanState>(); - public static LoggerRepository getLoggerRepository(LuanState luan) { - LoggerRepository lr = (LoggerRepository)luan.registry().get(KEY); - return lr != null ? lr : LogManager.getLoggerRepository(); - } - - public static void setLoggerRepository(LuanState luan,LoggerRepository lr) throws LuanException { - luan.registry().put(KEY,lr); - LuanTable module = (LuanTable)luan.require("luan:logging/Logging.luan"); - module.call( "init_root" ); + public static Logger getLogger(LuanState luan,String name) { + try { + luan.require("luan:logging/Logging.luan"); // ensure initialization + } catch(LuanException e) { + throw new RuntimeException(e); + } + tl.set(luan); + try { + return LoggerFactory.getLogger(name); + } finally { + tl.remove(); + } } - public static void newLoggerRepository(LuanState luan) throws LuanException { - LoggerRepository lr = new Hierarchy(new RootLogger(Level.DEBUG)); - setLoggerRepository(luan,lr); + public static LuanState luan() { + return tl.get(); } - - public static Logger getRootLogger(LuanState luan) { - return getLoggerRepository(luan).getRootLogger(); - } - - public static Logger getLogger(LuanState luan,String name) { - return getLoggerRepository(luan).getLogger(name); - } - }