Mercurial Hosting > luan
diff src/luan/modules/logging/LuanLogger.java @ 1454:219f2b937f2b
remove log4j
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 08 Mar 2020 14:11:30 -0600 |
parents | 27efb1fcbcb5 |
children | 8fbcc4747091 |
line wrap: on
line diff
--- a/src/luan/modules/logging/LuanLogger.java Mon Mar 02 15:09:10 2020 -0700 +++ b/src/luan/modules/logging/LuanLogger.java Sun Mar 08 14:11:30 2020 -0600 @@ -2,6 +2,12 @@ import goodjava.logging.Logger; import goodjava.logging.LoggerFactory; +import goodjava.logger.LoggingFactory; +import goodjava.logger.GoodLoggerFactory; +import goodjava.logger.Appender; +import goodjava.logger.ThreadLocalAppender; +import goodjava.logger.SimpleConfigurer; +import goodjava.logger.Level; import luan.Luan; import luan.LuanException; @@ -9,8 +15,8 @@ public final class LuanLogger { private final Logger logger; - public LuanLogger(Luan luan,String name) { - this.logger = getLogger(luan,name); + public LuanLogger(String name) { + this.logger = LoggerFactory.getLogger(name); } public void error(Object obj) throws LuanException { @@ -30,37 +36,58 @@ } - private static ThreadLocal<Luan> tl = new ThreadLocal<Luan>(); + private static final String KEY = "Logger.Appender"; + private static volatile Appender globalAppender = GoodLoggerFactory.DEFAULT_APPENDER; - private static void init(Luan luan) { - try { - luan.require("luan:logging/Logging.luan"); // ensure initialization - } catch(LuanException e) { - throw new RuntimeException(e); + public static synchronized void initThreadLogging() { + if( !(globalAppender instanceof ThreadLocalAppender) ) { + if( !(LoggerFactory.implementation instanceof LoggingFactory) ) + throw new RuntimeException("must use goodjava.logger for thread logging"); + globalAppender = new ThreadLocalAppender(globalAppender); + configure(); } } - public static Logger getLogger(Luan luan,String name) { - init(luan); - tl.set(luan); - try { - return LoggerFactory.getLogger(name); - } finally { - tl.remove(); + public static void startThreadLogging(Luan luan) { + if( !(globalAppender instanceof ThreadLocalAppender) ) + return; + ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender; + Appender appender = (Appender)luan.registry().get(KEY); + if( appender == null ) + appender = tla.defaultAppender; + tla.threadLocal.set(appender); + } + + public static void endThreadLogging() { + if( !(globalAppender instanceof ThreadLocalAppender) ) + return; + ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender; + tla.threadLocal.remove(); + } + + public static boolean isConfigured() { + if( !(LoggerFactory.implementation instanceof LoggingFactory) ) + return true; + return GoodLoggerFactory.getConfigurer() != GoodLoggerFactory.DEFAULT_CONFIGURER; + } + + public static void configure(Luan luan,Appender appender) { + if( globalAppender instanceof ThreadLocalAppender ) { + ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender; + if( tla.threadLocal.get() != null ) { + luan.registry().put(KEY,appender); + tla.threadLocal.set(appender); + } else { + tla.defaultAppender = appender; + } + } else { + globalAppender = appender; + configure(); } } - public static Logger getLogger(Luan luan,Class cls) { - init(luan); - tl.set(luan); - try { - return LoggerFactory.getLogger(cls); - } finally { - tl.remove(); - } + private static void configure() { + GoodLoggerFactory.setConfigurer( new SimpleConfigurer(Level.INFO,globalAppender) ); } - public static Luan luan() { - return tl.get(); - } }