view 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 source

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);
	}
}