view src/luan/modules/logging/Log4j.java @ 1336:7483108154bb

minor logging
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 14 Feb 2019 05:22:22 -0700
parents e0cf0d108a77
children 6617763dfd76
line wrap: on
line source

package luan.modules.logging;

import java.util.Enumeration;
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);
	}
}