1 package net.sf.openrocket.logging;
3 import net.sf.openrocket.util.BugException;
7 * Base class for all loggers used in OpenRocket.
9 * This class contains methods for logging at various log levels, and methods
10 * which take the logging level as a parameter. All methods may take three types
13 * <li><code>levels</code> number of additional levels of the stack trace to print
14 * on the log line. This is useful to determine from where
15 * the current method has been called. Zero if not provided.
16 * <li><code>message</code> the String message (may be null).
17 * <li><code>cause</code> the exception that caused this log (may be null).
20 * The logging methods are guaranteed never to throw an exception, and can thus be safely
21 * used in finally blocks.
23 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
25 public abstract class LogHelper {
27 * Level from which upward a TraceException is added to the log lines.
29 private static final LogLevel TRACING_LOG_LEVEL =
30 LogLevel.fromString(System.getProperty("openrocket.log.tracelevel"), LogLevel.INFO);
32 private static final DelegatorLogger delegator = new DelegatorLogger();
37 * Get the logger to be used in logging.
39 * @return the logger to be used in all logging.
41 public static LogHelper getInstance() {
48 * Log a LogLine object. This method needs to be able to cope with multiple threads
49 * accessing it concurrently (for example by being synchronized).
51 * @param line the LogLine to log.
53 public abstract void log(LogLine line);
57 * Log using VBOSE level.
59 * @param message the logged message (may be null).
61 public void verbose(String message) {
63 log(createLogLine(0, LogLevel.VBOSE, message, null));
64 } catch (Exception e) {
70 * Log using VBOSE level.
72 * @param message the logged message (may be null).
73 * @param cause the causing exception (may be null).
75 public void verbose(String message, Throwable cause) {
77 log(createLogLine(0, LogLevel.VBOSE, message, cause));
78 } catch (Exception e) {
84 * Log using VBOSE level.
86 * @param levels number of additional levels of stack trace to include.
87 * @param message the logged message (may be null).
89 public void verbose(int levels, String message) {
91 log(createLogLine(levels, LogLevel.VBOSE, message, null));
92 } catch (Exception e) {
98 * Log using VBOSE level.
100 * @param levels number of additional levels of stack trace to include.
101 * @param message the logged message (may be null).
102 * @param cause the causing exception (may be null).
104 public void verbose(int levels, String message, Throwable cause) {
106 log(createLogLine(levels, LogLevel.VBOSE, message, cause));
107 } catch (Exception e) {
114 * Log using DEBUG level.
116 * @param message the logged message (may be null).
118 public void debug(String message) {
120 log(createLogLine(0, LogLevel.DEBUG, message, null));
121 } catch (Exception e) {
127 * Log using DEBUG level.
129 * @param message the logged message (may be null).
130 * @param cause the causing exception (may be null).
132 public void debug(String message, Throwable cause) {
134 log(createLogLine(0, LogLevel.DEBUG, message, cause));
135 } catch (Exception e) {
141 * Log using DEBUG level.
143 * @param levels number of additional levels of stack trace to include.
144 * @param message the logged message (may be null).
146 public void debug(int levels, String message) {
148 log(createLogLine(levels, LogLevel.DEBUG, message, null));
149 } catch (Exception e) {
155 * Log using DEBUG level.
157 * @param levels number of additional levels of stack trace to include.
158 * @param message the logged message (may be null).
159 * @param cause the causing exception (may be null).
161 public void debug(int levels, String message, Throwable cause) {
163 log(createLogLine(levels, LogLevel.DEBUG, message, cause));
164 } catch (Exception e) {
171 * Log using INFO level.
173 * @param message the logged message (may be null).
175 public void info(String message) {
177 log(createLogLine(0, LogLevel.INFO, message, null));
178 } catch (Exception e) {
184 * Log using INFO level.
186 * @param message the logged message (may be null).
187 * @param cause the causing exception (may be null).
189 public void info(String message, Throwable cause) {
191 log(createLogLine(0, LogLevel.INFO, message, cause));
192 } catch (Exception e) {
198 * Log using INFO level.
200 * @param levels number of additional levels of stack trace to include.
201 * @param message the logged message (may be null).
203 public void info(int levels, String message) {
205 log(createLogLine(levels, LogLevel.INFO, message, null));
206 } catch (Exception e) {
212 * Log using INFO level.
214 * @param levels number of additional levels of stack trace to include.
215 * @param message the logged message (may be null).
216 * @param cause the causing exception (may be null).
218 public void info(int levels, String message, Throwable cause) {
220 log(createLogLine(levels, LogLevel.INFO, message, cause));
221 } catch (Exception e) {
228 * Log using USER level.
230 * @param message the logged message (may be null).
232 public void user(String message) {
234 log(createLogLine(0, LogLevel.USER, message, null));
235 } catch (Exception e) {
241 * Log using USER level.
243 * @param message the logged message (may be null).
244 * @param cause the causing exception (may be null).
246 public void user(String message, Throwable cause) {
248 log(createLogLine(0, LogLevel.USER, message, cause));
249 } catch (Exception e) {
255 * Log using USER level.
257 * @param levels number of additional levels of stack trace to include.
258 * @param message the logged message (may be null).
260 public void user(int levels, String message) {
262 log(createLogLine(levels, LogLevel.USER, message, null));
263 } catch (Exception e) {
269 * Log using USER level.
271 * @param levels number of additional levels of stack trace to include.
272 * @param message the logged message (may be null).
273 * @param cause the causing exception (may be null).
275 public void user(int levels, String message, Throwable cause) {
277 log(createLogLine(levels, LogLevel.USER, message, cause));
278 } catch (Exception e) {
285 * Log using WARN level.
287 * @param message the logged message (may be null).
289 public void warn(String message) {
291 log(createLogLine(0, LogLevel.WARN, message, null));
292 } catch (Exception e) {
298 * Log using WARN level.
300 * @param message the logged message (may be null).
301 * @param cause the causing exception (may be null).
303 public void warn(String message, Throwable cause) {
305 log(createLogLine(0, LogLevel.WARN, message, cause));
306 } catch (Exception e) {
312 * Log using WARN level.
314 * @param levels number of additional levels of stack trace to include.
315 * @param message the logged message (may be null).
317 public void warn(int levels, String message) {
319 log(createLogLine(levels, LogLevel.WARN, message, null));
320 } catch (Exception e) {
326 * Log using WARN level.
328 * @param levels number of additional levels of stack trace to include.
329 * @param message the logged message (may be null).
330 * @param cause the causing exception (may be null).
332 public void warn(int levels, String message, Throwable cause) {
334 log(createLogLine(levels, LogLevel.WARN, message, cause));
335 } catch (Exception e) {
342 * Log using ERROR level.
344 * @param message the logged message (may be null).
346 public void error(String message) {
348 log(createLogLine(0, LogLevel.ERROR, message, null));
349 } catch (Exception e) {
355 * Log using ERROR level.
357 * @param message the logged message (may be null).
358 * @param cause the causing exception (may be null).
360 public void error(String message, Throwable cause) {
362 log(createLogLine(0, LogLevel.ERROR, message, cause));
363 } catch (Exception e) {
369 * Log using ERROR level.
371 * @param levels number of additional levels of stack trace to include.
372 * @param message the logged message (may be null).
374 public void error(int levels, String message) {
376 log(createLogLine(levels, LogLevel.ERROR, message, null));
377 } catch (Exception e) {
383 * Log using ERROR level.
385 * @param levels number of additional levels of stack trace to include.
386 * @param message the logged message (may be null).
387 * @param cause the causing exception (may be null).
389 public void error(int levels, String message, Throwable cause) {
391 log(createLogLine(levels, LogLevel.ERROR, message, cause));
392 } catch (Exception e) {
400 * Log using the provided log level.
402 * @param level the logging level.
403 * @param message the logged message (may be null).
405 public void log(LogLevel level, String message) {
407 log(createLogLine(0, level, message, null));
408 } catch (Exception e) {
414 * Log using the provided log level.
416 * @param level the logging level.
417 * @param message the logged message (may be null).
418 * @param cause the causing exception (may be null).
420 public void log(LogLevel level, String message, Throwable cause) {
422 log(createLogLine(0, level, message, cause));
423 } catch (Exception e) {
429 * Log using the provided log level.
431 * @param levels number of additional levels of stack trace to include.
432 * @param level the logging level.
433 * @param message the logged message (may be null).
435 public void log(int levels, LogLevel level, String message) {
437 log(createLogLine(levels, level, message, null));
438 } catch (Exception e) {
444 * Log using the provided log level.
446 * @param levels number of additional levels of stack trace to include.
447 * @param level the logging level.
448 * @param message the logged message (may be null).
449 * @param cause the causing exception (may be null).
451 public void log(int levels, LogLevel level, String message, Throwable cause) {
453 log(createLogLine(levels, level, message, cause));
454 } catch (Exception e) {
462 * Instantiates, logs and throws a BugException. The message is logged at
465 * This method never returns normally.
467 * @param message the message for the log and exception.
468 * @throws BugException always.
470 public void throwBugException(String message) throws BugException {
471 BugException e = new BugException(message);
472 log(createLogLine(0, LogLevel.ERROR, message, e));
477 * Instantiates, logs and throws a BugException. The message is logged at
478 * ERROR level with the specified cause.
480 * This method never returns normally.
482 * @param message the message for the log and exception.
483 * @param cause the causing exception (may be null).
484 * @throws BugException always.
486 public void throwBugException(String message, Throwable cause) throws BugException {
487 BugException e = new BugException(message, cause);
488 log(createLogLine(0, LogLevel.ERROR, message, cause));
496 * Create a LogLine object from the provided information. This method must be
497 * called directly from the called method in order for the trace position
500 * @param additionalLevels how many additional stack trace levels to include on the line.
501 * @param level the log level.
502 * @param message the log message (null ok).
503 * @param cause the log exception (null ok).
505 * @return a LogLine populated with all necessary fields.
507 private LogLine createLogLine(int additionalLevels, LogLevel level, String message,
509 TraceException trace;
510 if (level.atLeast(TRACING_LOG_LEVEL)) {
511 trace = new TraceException(2, 2 + additionalLevels);
515 return new LogLine(level, trace, message, cause);