bacab743fc2db0c81d92e25e6d3794273742112f
[jalview.git] / src / jalview / log / JLoggerLog4j.java
1 package jalview.log;
2
3 import org.apache.logging.log4j.Logger;
4 import org.apache.logging.log4j.core.Appender;
5
6 import jalview.util.Log4j;
7 import jalview.util.Platform;
8
9 public class JLoggerLog4j extends JLogger implements JLoggerI
10 {
11   private Logger logger = null;
12
13   public static JLoggerLog4j getLogger(Class c)
14   {
15     return getLogger(c);
16   }
17
18   public static JLoggerLog4j getLogger(Class c, LogLevel loglevel)
19   {
20     return getLogger(c.getCanonicalName(), loglevel);
21   }
22
23   public static JLoggerLog4j getLogger(String name)
24   {
25     return getLogger(name, LogLevel.INFO);
26   }
27
28   public static JLoggerLog4j getLogger(String name, LogLevel loglevel)
29   {
30     return registryContainsKey(name) ? (JLoggerLog4j) registryGet(name)
31             : new JLoggerLog4j(name, loglevel);
32   }
33
34   private JLoggerLog4j(String name, LogLevel level)
35   {
36     this.name = name;
37     this.level = level;
38     this.loggerSetup();
39     this.registryStore();
40   }
41
42   @Override
43   protected void loggerSetup()
44   {
45     if (!Platform.isJS())
46       this.logger = Log4j.isInit() ? Log4j.getLogger(this.name, this.level)
47               : null;
48   }
49
50   @Override
51   public boolean loggerExists()
52   {
53     return logger != null;
54   }
55
56   @Override
57   protected void loggerSetLevel(JLoggerI.LogLevel level)
58   {
59     if (loggerExists())
60     {
61       Log4j.setLevel(logger, level);
62     }
63   }
64
65   @Override
66   protected void loggerLogMessage(LogLevel level, String message,
67           Throwable t)
68   {
69     if (!loggerExists())
70       return;
71     if (t != null)
72     {
73       switch (level)
74       {
75       case FATAL:
76         logger.fatal(message, t);
77         break;
78       case ERROR:
79         logger.error(message, t);
80         break;
81       case WARN:
82         logger.warn(message, t);
83         break;
84       case INFO:
85         logger.info(message, t);
86         break;
87       case DEBUG:
88         logger.debug(message, t);
89         break;
90       case TRACE:
91         logger.trace(message, t);
92         break;
93       case ALL:
94         logger.trace(message, t);
95         break;
96       }
97     }
98     else
99     {
100       switch (level)
101       {
102       case FATAL:
103         logger.fatal(message);
104         break;
105       case ERROR:
106         logger.error(message);
107         break;
108       case WARN:
109         logger.warn(message);
110         break;
111       case INFO:
112         logger.info(message);
113         break;
114       case DEBUG:
115         logger.debug(message);
116         break;
117       case TRACE:
118         logger.trace(message);
119         break;
120       case ALL:
121         logger.trace(message);
122         break;
123       }
124     }
125   }
126
127   private Logger getLoggerObject()
128   {
129     return this.logger;
130   }
131
132   public synchronized static void addAppender(JLoggerLog4j level,
133           Appender appender)
134   {
135     if (!Platform.isJS())
136       Log4j.addAppender(level.getLoggerObject(), appender);
137   }
138
139   public synchronized static void addAppender(JLoggerLog4j l1,
140           JLoggerLog4j l2, String name)
141   {
142     if (!Platform.isJS())
143       Log4j.addAppender(l1.getLoggerObject(), l2.getLoggerObject(), name);
144   }
145
146 }