2f4fafbf7143b9fddba77cce58e2d15d5d7d0b28
[jalview.git] / src / jalview / log / JLogger.java
1 package jalview.log;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import jalview.bin.Console;
7 import jalview.util.Platform;
8
9 public abstract class JLogger implements JLoggerI
10 {
11   protected String name;
12
13   protected LogLevel level;
14
15   private Object logger = null;
16
17   private static Map<String, JLogger> registry = new HashMap<>();
18
19   // implement these abstract methods
20   protected abstract void loggerSetup();
21
22   public abstract boolean loggerExists();
23
24   protected abstract void loggerSetLevel(LogLevel level);
25
26   protected abstract void loggerLogMessage(LogLevel level, String message,
27           Throwable t);
28
29   public static LogLevel toLevel(String levelString)
30   {
31     try
32     {
33       return LogLevel.valueOf(levelString);
34     } catch (IllegalArgumentException e)
35     {
36       Console.error("Could not parse LogLevel '" + levelString + "'", e);
37       return LogLevel.INFO;
38     }
39   }
40
41   public static JLogger getLogger(Class c)
42   {
43     return getLogger(c);
44   }
45
46   public static JLogger getLogger(Class c, LogLevel loglevel)
47   {
48     return getLogger(c.getCanonicalName(), loglevel);
49   }
50
51   public static JLogger getLogger(String name)
52   {
53     return getLogger(name, LogLevel.INFO);
54   }
55
56   public static JLogger getLogger(String name, LogLevel loglevel)
57   {
58     return registry.containsKey(name) ? (JLogger) registry.get(name) : null;
59   }
60
61   protected JLogger()
62   {
63   }
64
65   protected JLogger(String name, LogLevel level)
66   {
67     this.name = name;
68     this.level = level;
69     this.loggerSetup();
70     this.registryStore();
71   }
72
73   protected void registryStore()
74   {
75     registry.put(this.name, this);
76   }
77
78   protected static boolean registryContainsKey(String name)
79   {
80     return registry.containsKey(name);
81   }
82
83   protected static JLogger registryGet(String name)
84   {
85     return registry.get(name);
86   }
87
88   public LogLevel getLevel()
89   {
90     return this.level;
91   }
92
93   public void setLevel(LogLevel level)
94   {
95     this.level = level;
96     if (loggerExists())
97       loggerSetLevel(level);
98   }
99
100   private boolean println(LogLevel loglevel, String message, Throwable t)
101   {
102     if (loglevel.compareTo(this.level) < 0)
103     {
104       return false;
105     }
106     if (!loggerExists() || Platform.isJS())
107     {
108       String logLine = String.format("%s: %s", loglevel.toString(),
109               message);
110       System.out.println(logLine);
111       if (t != null)
112       {
113         if (loglevel.compareTo(LogLevel.DEBUG) <= 0)
114           t.printStackTrace(System.err);
115         else
116           System.err.println(t.getMessage());
117       }
118       return false;
119     }
120     else
121     {
122       loggerLogMessage(loglevel, message, t);
123       return true;
124     }
125   }
126
127   public void trace(String message)
128   {
129     trace(message, null);
130   }
131
132   public void trace(String message, Throwable t)
133   {
134     println(LogLevel.TRACE, message, t);
135   }
136
137   public void debug(String message)
138   {
139     debug(message, null);
140   }
141
142   public void debug(String message, Throwable t)
143   {
144     println(LogLevel.DEBUG, message, t);
145   }
146
147   public void info(String message)
148   {
149     info(message, null);
150   }
151
152   public void info(String message, Throwable t)
153   {
154     println(LogLevel.INFO, message, t);
155   }
156
157   public void warn(String message)
158   {
159     warn(message, null);
160   }
161
162   public void warn(String message, Throwable t)
163   {
164     println(LogLevel.WARN, message, t);
165   }
166
167   public void error(String message)
168   {
169     error(message, null);
170   }
171
172   public void error(String message, Throwable t)
173   {
174     println(LogLevel.ERROR, message, t);
175   }
176
177   public void fatal(String message)
178   {
179     fatal(message, null);
180   }
181
182   public void fatal(String message, Throwable t)
183   {
184     println(LogLevel.FATAL, message, t);
185   }
186
187   public boolean isDebugEnabled()
188   {
189     return level.compareTo(LogLevel.DEBUG) <= 0;
190   }
191
192   public boolean isTraceEnabled()
193   {
194     return level.compareTo(LogLevel.TRACE) <= 0;
195   }
196 }