03b664a9752526718c875e35ca2d3ae702e2a1d1
[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.Cache;
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       Cache.error("Could not parse LogLevel '" + levelString + "'", e);
37       return LogLevel.INFO;
38     }
39   }
40
41   public static JLogger getLogger(String name)
42   {
43     return getLogger(name, LogLevel.INFO);
44   }
45
46   public static JLogger getLogger(String name, LogLevel loglevel)
47   {
48     return registry.containsKey(name) ? (JLogger) registry.get(name) : null;
49   }
50
51   protected JLogger()
52   {
53   }
54
55   protected JLogger(String name, LogLevel level)
56   {
57     this.name = name;
58     this.level = level;
59     this.loggerSetup();
60     this.registryStore();
61   }
62
63   protected void registryStore()
64   {
65     registry.put(this.name, this);
66   }
67
68   protected static boolean registryContainsKey(String name)
69   {
70     return registry.containsKey(name);
71   }
72
73   protected static JLogger registryGet(String name)
74   {
75     return registry.get(name);
76   }
77
78   public LogLevel getLevel()
79   {
80     return this.level;
81   }
82
83   public void setLevel(LogLevel level)
84   {
85     this.level = level;
86     if (loggerExists())
87       loggerSetLevel(level);
88   }
89
90   private boolean println(LogLevel level, String message, Throwable t)
91   {
92     if (!loggerExists() || Platform.isJS())
93     {
94       String logLine = String.format("%s: %s", level.toString(), message);
95       System.out.println(logLine);
96       if (t != null)
97       {
98         if (level.compareTo(LogLevel.DEBUG) <= 0)
99           t.printStackTrace(System.err);
100         else
101           System.err.println(t.getMessage());
102       }
103       return false;
104     }
105     else
106     {
107       loggerLogMessage(level, message, t);
108       return true;
109     }
110   }
111
112   public void trace(String message)
113   {
114     trace(message, null);
115   }
116
117   public void trace(String message, Throwable t)
118   {
119     println(LogLevel.TRACE, message, t);
120   }
121
122   public void debug(String message)
123   {
124     debug(message, null);
125   }
126
127   public void debug(String message, Throwable t)
128   {
129     println(LogLevel.DEBUG, message, t);
130   }
131
132   public void info(String message)
133   {
134     info(message, null);
135   }
136
137   public void info(String message, Throwable t)
138   {
139     println(LogLevel.INFO, message, t);
140   }
141
142   public void warn(String message)
143   {
144     warn(message, null);
145   }
146
147   public void warn(String message, Throwable t)
148   {
149     println(LogLevel.WARN, message, t);
150   }
151
152   public void error(String message)
153   {
154     error(message, null);
155   }
156
157   public void error(String message, Throwable t)
158   {
159     println(LogLevel.ERROR, message, t);
160   }
161
162   public void fatal(String message)
163   {
164     fatal(message, null);
165   }
166
167   public void fatal(String message, Throwable t)
168   {
169     println(LogLevel.FATAL, message, t);
170   }
171
172   public boolean isDebugEnabled()
173   {
174     return level.compareTo(LogLevel.DEBUG) <= 0;
175   }
176
177   public boolean isTraceEnabled()
178   {
179     return level.compareTo(LogLevel.TRACE) <= 0;
180   }
181 }