made the log4j LoggerImpl thread-safe
[mir.git] / source / mir / log / log4j / LoggerImpl.java
1 package mir.log.log4j;\r
2 \r
3 import org.apache.log4j.PropertyConfigurator;\r
4 import org.apache.log4j.Logger;\r
5 \r
6 import java.util.Map;\r
7 import java.util.HashMap;\r
8 \r
9 import mir.misc.MirConfig;\r
10 \r
11 public class LoggerImpl implements mir.log.Logger {\r
12   private static Map loggers = new HashMap();\r
13 \r
14   public LoggerImpl() {\r
15     System.setProperty("log.home", MirConfig.getPropWithHome("Log.Home"));\r
16     PropertyConfigurator.configure(MirConfig.getPropWithHome(\r
17         "Log.log4j.ConfigurationFile").trim());\r
18   }\r
19 \r
20   public void debug(Object o, String s) {\r
21     this.getLogger(o).debug(s);\r
22   }\r
23 \r
24   public void info(Object o, String s) {\r
25     this.getLogger(o).info(s);\r
26   }\r
27 \r
28   public void warn(Object o, String s) {\r
29     this.getLogger(o).warn(s);\r
30   }\r
31 \r
32   public void error(Object o, String s) {\r
33     this.getLogger(o).error(s);\r
34   }\r
35 \r
36   public void fatal(Object o, String s) {\r
37     this.getLogger(o).fatal(s);\r
38   }\r
39 \r
40   private Logger getLogger(Object o) {\r
41     String name;\r
42     Logger l;\r
43 \r
44     if (o instanceof String) {\r
45       name = (String) o;\r
46     }\r
47     else if (o instanceof Class) {\r
48       name = ( (Class) o).getName();\r
49     }\r
50     else if (o != null) {\r
51       name = o.getClass().getName();\r
52     }\r
53     else {\r
54       name = "generic";\r
55     }\r
56 \r
57     synchronized (loggers) {\r
58       l = (Logger) loggers.get(name);\r
59       if (l == null) {\r
60         if (!loggers.containsKey(name)) {\r
61           l = Logger.getLogger(name);\r
62           loggers.put(name, l);\r
63         }\r
64         l = (Logger) loggers.get(name);\r
65       }\r
66     }\r
67 \r
68     return l;\r
69   }\r
70 }