comparison 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
comparison
equal deleted inserted replaced
1453:928be2a4d565 1454:219f2b937f2b
1 package luan.modules.logging; 1 package luan.modules.logging;
2 2
3 import goodjava.logging.Logger; 3 import goodjava.logging.Logger;
4 import goodjava.logging.LoggerFactory; 4 import goodjava.logging.LoggerFactory;
5 import goodjava.logger.LoggingFactory;
6 import goodjava.logger.GoodLoggerFactory;
7 import goodjava.logger.Appender;
8 import goodjava.logger.ThreadLocalAppender;
9 import goodjava.logger.SimpleConfigurer;
10 import goodjava.logger.Level;
5 import luan.Luan; 11 import luan.Luan;
6 import luan.LuanException; 12 import luan.LuanException;
7 13
8 14
9 public final class LuanLogger { 15 public final class LuanLogger {
10 private final Logger logger; 16 private final Logger logger;
11 17
12 public LuanLogger(Luan luan,String name) { 18 public LuanLogger(String name) {
13 this.logger = getLogger(luan,name); 19 this.logger = LoggerFactory.getLogger(name);
14 } 20 }
15 21
16 public void error(Object obj) throws LuanException { 22 public void error(Object obj) throws LuanException {
17 logger.error( Luan.luanToString(obj) ); 23 logger.error( Luan.luanToString(obj) );
18 } 24 }
28 public void debug(Object obj) throws LuanException { 34 public void debug(Object obj) throws LuanException {
29 logger.debug( Luan.luanToString(obj) ); 35 logger.debug( Luan.luanToString(obj) );
30 } 36 }
31 37
32 38
33 private static ThreadLocal<Luan> tl = new ThreadLocal<Luan>(); 39 private static final String KEY = "Logger.Appender";
40 private static volatile Appender globalAppender = GoodLoggerFactory.DEFAULT_APPENDER;
34 41
35 private static void init(Luan luan) { 42 public static synchronized void initThreadLogging() {
36 try { 43 if( !(globalAppender instanceof ThreadLocalAppender) ) {
37 luan.require("luan:logging/Logging.luan"); // ensure initialization 44 if( !(LoggerFactory.implementation instanceof LoggingFactory) )
38 } catch(LuanException e) { 45 throw new RuntimeException("must use goodjava.logger for thread logging");
39 throw new RuntimeException(e); 46 globalAppender = new ThreadLocalAppender(globalAppender);
47 configure();
40 } 48 }
41 } 49 }
42 50
43 public static Logger getLogger(Luan luan,String name) { 51 public static void startThreadLogging(Luan luan) {
44 init(luan); 52 if( !(globalAppender instanceof ThreadLocalAppender) )
45 tl.set(luan); 53 return;
46 try { 54 ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender;
47 return LoggerFactory.getLogger(name); 55 Appender appender = (Appender)luan.registry().get(KEY);
48 } finally { 56 if( appender == null )
49 tl.remove(); 57 appender = tla.defaultAppender;
58 tla.threadLocal.set(appender);
59 }
60
61 public static void endThreadLogging() {
62 if( !(globalAppender instanceof ThreadLocalAppender) )
63 return;
64 ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender;
65 tla.threadLocal.remove();
66 }
67
68 public static boolean isConfigured() {
69 if( !(LoggerFactory.implementation instanceof LoggingFactory) )
70 return true;
71 return GoodLoggerFactory.getConfigurer() != GoodLoggerFactory.DEFAULT_CONFIGURER;
72 }
73
74 public static void configure(Luan luan,Appender appender) {
75 if( globalAppender instanceof ThreadLocalAppender ) {
76 ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender;
77 if( tla.threadLocal.get() != null ) {
78 luan.registry().put(KEY,appender);
79 tla.threadLocal.set(appender);
80 } else {
81 tla.defaultAppender = appender;
82 }
83 } else {
84 globalAppender = appender;
85 configure();
50 } 86 }
51 } 87 }
52 88
53 public static Logger getLogger(Luan luan,Class cls) { 89 private static void configure() {
54 init(luan); 90 GoodLoggerFactory.setConfigurer( new SimpleConfigurer(Level.INFO,globalAppender) );
55 tl.set(luan);
56 try {
57 return LoggerFactory.getLogger(cls);
58 } finally {
59 tl.remove();
60 }
61 } 91 }
62 92
63 public static Luan luan() {
64 return tl.get();
65 }
66 } 93 }