JAL-3746 apply copyright to source
[jalview.git] / src / jalview / log / JLoggerLog4j.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.log;
22
23 import org.apache.logging.log4j.Logger;
24 import org.apache.logging.log4j.core.Appender;
25
26 import jalview.util.Log4j;
27 import jalview.util.Platform;
28
29 public class JLoggerLog4j extends JLogger implements JLoggerI
30 {
31   private Logger logger = null;
32
33   public static JLoggerLog4j getLogger(Class c)
34   {
35     return getLogger(c);
36   }
37
38   public static JLoggerLog4j getLogger(Class c, LogLevel loglevel)
39   {
40     return getLogger(c.getCanonicalName(), loglevel);
41   }
42
43   public static JLoggerLog4j getLogger(String name)
44   {
45     return getLogger(name, LogLevel.INFO);
46   }
47
48   public static JLoggerLog4j getLogger(String name, LogLevel loglevel)
49   {
50     return registryContainsKey(name) ? (JLoggerLog4j) registryGet(name)
51             : new JLoggerLog4j(name, loglevel);
52   }
53
54   private JLoggerLog4j(String name, LogLevel level)
55   {
56     this.name = name;
57     this.level = level;
58     this.loggerSetup();
59     this.registryStore();
60   }
61
62   @Override
63   protected void loggerSetup()
64   {
65     if (!Platform.isJS())
66       this.logger = Log4j.isInit() ? Log4j.getLogger(this.name, this.level)
67               : null;
68   }
69
70   @Override
71   public boolean loggerExists()
72   {
73     return logger != null;
74   }
75
76   @Override
77   protected void loggerSetLevel(JLoggerI.LogLevel level)
78   {
79     if (loggerExists())
80     {
81       Log4j.setLevel(logger, level);
82     }
83   }
84
85   @Override
86   protected void loggerLogMessage(LogLevel level, String message,
87           Throwable t)
88   {
89     if (!loggerExists())
90       return;
91     if (t != null)
92     {
93       switch (level)
94       {
95       case FATAL:
96         logger.fatal(message, t);
97         break;
98       case ERROR:
99         logger.error(message, t);
100         break;
101       case WARN:
102         logger.warn(message, t);
103         break;
104       case INFO:
105         logger.info(message, t);
106         break;
107       case DEBUG:
108         logger.debug(message, t);
109         break;
110       case TRACE:
111         logger.trace(message, t);
112         break;
113       case ALL:
114         logger.trace(message, t);
115         break;
116       }
117     }
118     else
119     {
120       switch (level)
121       {
122       case FATAL:
123         logger.fatal(message);
124         break;
125       case ERROR:
126         logger.error(message);
127         break;
128       case WARN:
129         logger.warn(message);
130         break;
131       case INFO:
132         logger.info(message);
133         break;
134       case DEBUG:
135         logger.debug(message);
136         break;
137       case TRACE:
138         logger.trace(message);
139         break;
140       case ALL:
141         logger.trace(message);
142         break;
143       }
144     }
145   }
146
147   private Logger getLoggerObject()
148   {
149     return this.logger;
150   }
151
152   public synchronized static void addAppender(JLoggerLog4j level,
153           Appender appender)
154   {
155     if (!Platform.isJS())
156       Log4j.addAppender(level.getLoggerObject(), appender);
157   }
158
159   public synchronized static void addAppender(JLoggerLog4j l1,
160           JLoggerLog4j l2, String name)
161   {
162     if (!Platform.isJS())
163       Log4j.addAppender(l1.getLoggerObject(), l2.getLoggerObject(), name);
164   }
165
166 }