Mercurial Hosting > luan
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 } |