Mercurial Hosting > luan
diff src/luan/modules/logging/Log4j.java @ 1332:11b7e11f9ed5
cleaner logging
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 12 Feb 2019 21:50:26 -0700 |
parents | src/luan/modules/logging/LuanLogger.java@307e76ccd0d6 |
children | 25746915a241 |
line wrap: on
line diff
--- /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); + } +}