diff src/luan/modules/logging/LuanLogger.java @ 1454:219f2b937f2b

remove log4j
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 08 Mar 2020 14:11:30 -0600
parents 27efb1fcbcb5
children 8fbcc4747091
line wrap: on
line diff
--- a/src/luan/modules/logging/LuanLogger.java	Mon Mar 02 15:09:10 2020 -0700
+++ b/src/luan/modules/logging/LuanLogger.java	Sun Mar 08 14:11:30 2020 -0600
@@ -2,6 +2,12 @@
 
 import goodjava.logging.Logger;
 import goodjava.logging.LoggerFactory;
+import goodjava.logger.LoggingFactory;
+import goodjava.logger.GoodLoggerFactory;
+import goodjava.logger.Appender;
+import goodjava.logger.ThreadLocalAppender;
+import goodjava.logger.SimpleConfigurer;
+import goodjava.logger.Level;
 import luan.Luan;
 import luan.LuanException;
 
@@ -9,8 +15,8 @@
 public final class LuanLogger {
 	private final Logger logger;
 
-	public LuanLogger(Luan luan,String name) {
-		this.logger = getLogger(luan,name);
+	public LuanLogger(String name) {
+		this.logger = LoggerFactory.getLogger(name);
 	}
 
 	public void error(Object obj) throws LuanException {
@@ -30,37 +36,58 @@
 	}
 
 
-	private static ThreadLocal<Luan> tl = new ThreadLocal<Luan>();
+	private static final String KEY = "Logger.Appender";
+	private static volatile Appender globalAppender = GoodLoggerFactory.DEFAULT_APPENDER;
 
-	private static void init(Luan luan) {
-		try {
-			luan.require("luan:logging/Logging.luan");  // ensure initialization
-		} catch(LuanException e) {
-			throw new RuntimeException(e);
+	public static synchronized void initThreadLogging() {
+		if( !(globalAppender instanceof ThreadLocalAppender) ) {
+			if( !(LoggerFactory.implementation instanceof LoggingFactory) )
+				throw new RuntimeException("must use goodjava.logger for thread logging");
+			globalAppender = new ThreadLocalAppender(globalAppender);
+			configure();
 		}
 	}
 
-	public static Logger getLogger(Luan luan,String name) {
-		init(luan);
-		tl.set(luan);
-		try {
-			return LoggerFactory.getLogger(name);
-		} finally {
-			tl.remove();
+	public static void startThreadLogging(Luan luan) {
+		if( !(globalAppender instanceof ThreadLocalAppender) )
+			return;
+		ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender;
+		Appender appender = (Appender)luan.registry().get(KEY);
+		if( appender == null )
+			appender = tla.defaultAppender;
+		tla.threadLocal.set(appender);
+	}
+
+	public static void endThreadLogging() {
+		if( !(globalAppender instanceof ThreadLocalAppender) )
+			return;
+		ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender;
+		tla.threadLocal.remove();
+	}
+
+	public static boolean isConfigured() {
+		if( !(LoggerFactory.implementation instanceof LoggingFactory) )
+			return true;
+		return GoodLoggerFactory.getConfigurer() != GoodLoggerFactory.DEFAULT_CONFIGURER;
+	}
+
+	public static void configure(Luan luan,Appender appender) {
+		if( globalAppender instanceof ThreadLocalAppender ) {
+			ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender;
+			if( tla.threadLocal.get() != null ) {
+				luan.registry().put(KEY,appender);
+				tla.threadLocal.set(appender);
+			} else {
+				tla.defaultAppender = appender;
+			}
+		} else {
+			globalAppender = appender;
+			configure();
 		}
 	}
 
-	public static Logger getLogger(Luan luan,Class cls) {
-		init(luan);
-		tl.set(luan);
-		try {
-			return LoggerFactory.getLogger(cls);
-		} finally {
-			tl.remove();
-		}
+	private static void configure() {
+		GoodLoggerFactory.setConfigurer( new SimpleConfigurer(Level.INFO,globalAppender) );
 	}
 
-	public static Luan luan() {
-		return tl.get();
-	}
 }