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