Mercurial Hosting > luan
view src/luan/modules/logging/Log4j.java @ 1365:6617763dfd76
fix logging and lucene backup
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 12 Jun 2019 22:16:10 -0600 |
parents | 7483108154bb |
children |
line wrap: on
line source
package luan.modules.logging; import java.util.Enumeration; import java.util.List; import java.util.ArrayList; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.apache.log4j.Hierarchy; import org.apache.log4j.Level; import org.apache.log4j.Appender; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.RootLogger; import org.apache.log4j.spi.RepositorySelector; import luan.Luan; import luan.LuanException; import luan.LuanTable; public final class Log4j { private static final String KEY = "Logger.Repository"; private static final LoggerRepository defaultLoggerRepository = LogManager.getLoggerRepository(); public static void newLoggerRepository(Luan luan) { Logger oldLogger = defaultLoggerRepository.getRootLogger(); Logger newLogger = new RootLogger(Level.DEBUG); LoggerRepository lr = new Hierarchy(newLogger); for( Enumeration en = oldLogger.getAllAppenders(); en.hasMoreElements(); ) { Appender appender = (Appender)en.nextElement(); newLogger.addAppender(appender); } luan.registry().put(KEY,lr); } private static LoggerRepository getLoggerRepository(Luan luan) { LoggerRepository lr = (LoggerRepository)luan.registry().get(KEY); return lr != null ? lr : defaultLoggerRepository; } static { LogManager.setRepositorySelector( new RepositorySelector() { public LoggerRepository getLoggerRepository() { Luan luan = LuanLogger.luan(); return luan==null ? defaultLoggerRepository : Log4j.getLoggerRepository(luan); } }, new Object() ); } public static Logger getRootLogger(Luan luan) { return getLoggerRepository(luan).getRootLogger(); } public static Logger getLogger(Luan luan,String name) { return getLoggerRepository(luan).getLogger(name); } // because logger.removeAllAppenders() closes the appenders public static void removeAllAppenders(Logger logger) { List<Appender> list = new ArrayList<Appender>(); for( Enumeration en = logger.getAllAppenders(); en.hasMoreElements(); ) { Appender appender = (Appender)en.nextElement(); list.add(appender); } for( Appender appender : list ) { logger.removeAppender(appender); } if( logger.getAllAppenders().hasMoreElements() ) throw new RuntimeException(); } }