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 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
22 public abstract class LogHelper {
24 * Level from which upward a TraceException is added to the log lines.
26 private static final LogLevel TRACING_LOG_LEVEL =
27 LogLevel.fromString(System.getProperty("openrocket.log.tracelevel"), LogLevel.INFO);
29 private static final DelegatorLogger delegator = new DelegatorLogger();
34 * Get the logger to be used in logging.
36 * @return the logger to be used in all logging.
38 public static LogHelper getInstance() {
45 * Log a LogLine object. This method needs to be able to cope with multiple threads
46 * accessing it concurrently (for example by being synchronized).
48 * @param line the LogLine to log.
50 public abstract void log(LogLine line);
54 * Log using VBOSE level.
56 * @param message the logged message (may be null).
58 public void verbose(String message) {
59 log(createLogLine(0, LogLevel.VBOSE, message, null));
63 * Log using VBOSE level.
65 * @param message the logged message (may be null).
66 * @param cause the causing exception (may be null).
68 public void verbose(String message, Throwable cause) {
69 log(createLogLine(0, LogLevel.VBOSE, message, cause));
73 * Log using VBOSE level.
75 * @param levels number of additional levels of stack trace to include.
76 * @param message the logged message (may be null).
78 public void verbose(int levels, String message) {
79 log(createLogLine(levels, LogLevel.VBOSE, message, null));
83 * Log using VBOSE level.
85 * @param levels number of additional levels of stack trace to include.
86 * @param message the logged message (may be null).
87 * @param cause the causing exception (may be null).
89 public void verbose(int levels, String message, Throwable cause) {
90 log(createLogLine(levels, LogLevel.VBOSE, message, cause));
95 * Log using DEBUG level.
97 * @param message the logged message (may be null).
99 public void debug(String message) {
100 log(createLogLine(0, LogLevel.DEBUG, message, null));
104 * Log using DEBUG level.
106 * @param message the logged message (may be null).
107 * @param cause the causing exception (may be null).
109 public void debug(String message, Throwable cause) {
110 log(createLogLine(0, LogLevel.DEBUG, message, cause));
114 * Log using DEBUG level.
116 * @param levels number of additional levels of stack trace to include.
117 * @param message the logged message (may be null).
119 public void debug(int levels, String message) {
120 log(createLogLine(levels, LogLevel.DEBUG, message, null));
124 * Log using DEBUG level.
126 * @param levels number of additional levels of stack trace to include.
127 * @param message the logged message (may be null).
128 * @param cause the causing exception (may be null).
130 public void debug(int levels, String message, Throwable cause) {
131 log(createLogLine(levels, LogLevel.DEBUG, message, cause));
136 * Log using INFO level.
138 * @param message the logged message (may be null).
140 public void info(String message) {
141 log(createLogLine(0, LogLevel.INFO, message, null));
145 * Log using INFO level.
147 * @param message the logged message (may be null).
148 * @param cause the causing exception (may be null).
150 public void info(String message, Throwable cause) {
151 log(createLogLine(0, LogLevel.INFO, message, cause));
155 * Log using INFO level.
157 * @param levels number of additional levels of stack trace to include.
158 * @param message the logged message (may be null).
160 public void info(int levels, String message) {
161 log(createLogLine(levels, LogLevel.INFO, message, null));
165 * Log using INFO level.
167 * @param levels number of additional levels of stack trace to include.
168 * @param message the logged message (may be null).
169 * @param cause the causing exception (may be null).
171 public void info(int levels, String message, Throwable cause) {
172 log(createLogLine(levels, LogLevel.INFO, message, cause));
177 * Log using USER level.
179 * @param message the logged message (may be null).
181 public void user(String message) {
182 log(createLogLine(0, LogLevel.USER, message, null));
186 * Log using USER level.
188 * @param message the logged message (may be null).
189 * @param cause the causing exception (may be null).
191 public void user(String message, Throwable cause) {
192 log(createLogLine(0, LogLevel.USER, message, cause));
196 * Log using USER level.
198 * @param levels number of additional levels of stack trace to include.
199 * @param message the logged message (may be null).
201 public void user(int levels, String message) {
202 log(createLogLine(levels, LogLevel.USER, message, null));
206 * Log using USER level.
208 * @param levels number of additional levels of stack trace to include.
209 * @param message the logged message (may be null).
210 * @param cause the causing exception (may be null).
212 public void user(int levels, String message, Throwable cause) {
213 log(createLogLine(levels, LogLevel.USER, message, cause));
218 * Log using WARN level.
220 * @param message the logged message (may be null).
222 public void warn(String message) {
223 log(createLogLine(0, LogLevel.WARN, message, null));
227 * Log using WARN level.
229 * @param message the logged message (may be null).
230 * @param cause the causing exception (may be null).
232 public void warn(String message, Throwable cause) {
233 log(createLogLine(0, LogLevel.WARN, message, cause));
237 * Log using WARN level.
239 * @param levels number of additional levels of stack trace to include.
240 * @param message the logged message (may be null).
242 public void warn(int levels, String message) {
243 log(createLogLine(levels, LogLevel.WARN, message, null));
247 * Log using WARN level.
249 * @param levels number of additional levels of stack trace to include.
250 * @param message the logged message (may be null).
251 * @param cause the causing exception (may be null).
253 public void warn(int levels, String message, Throwable cause) {
254 log(createLogLine(levels, LogLevel.WARN, message, cause));
259 * Log using ERROR level.
261 * @param message the logged message (may be null).
263 public void error(String message) {
264 log(createLogLine(0, LogLevel.ERROR, message, null));
268 * Log using ERROR level.
270 * @param message the logged message (may be null).
271 * @param cause the causing exception (may be null).
273 public void error(String message, Throwable cause) {
274 log(createLogLine(0, LogLevel.ERROR, message, cause));
278 * Log using ERROR level.
280 * @param levels number of additional levels of stack trace to include.
281 * @param message the logged message (may be null).
283 public void error(int levels, String message) {
284 log(createLogLine(levels, LogLevel.ERROR, message, null));
288 * Log using ERROR level.
290 * @param levels number of additional levels of stack trace to include.
291 * @param message the logged message (may be null).
292 * @param cause the causing exception (may be null).
294 public void error(int levels, String message, Throwable cause) {
295 log(createLogLine(levels, LogLevel.ERROR, message, cause));
301 * Log using the provided log level.
303 * @param level the logging level.
304 * @param message the logged message (may be null).
306 public void log(LogLevel level, String message) {
307 log(createLogLine(0, level, message, null));
311 * Log using the provided log level.
313 * @param level the logging level.
314 * @param message the logged message (may be null).
315 * @param cause the causing exception (may be null).
317 public void log(LogLevel level, String message, Throwable cause) {
318 log(createLogLine(0, level, message, cause));
322 * Log using the provided log level.
324 * @param levels number of additional levels of stack trace to include.
325 * @param level the logging level.
326 * @param message the logged message (may be null).
328 public void log(int levels, LogLevel level, String message) {
329 log(createLogLine(levels, level, message, null));
333 * Log using the provided log level.
335 * @param levels number of additional levels of stack trace to include.
336 * @param level the logging level.
337 * @param message the logged message (may be null).
338 * @param cause the causing exception (may be null).
340 public void log(int levels, LogLevel level, String message, Throwable cause) {
341 log(createLogLine(levels, level, message, cause));
347 * Instantiates, logs and throws a BugException. The message is logged at
350 * This method never returns normally.
352 * @param message the message for the log and exception.
353 * @throws BugException always.
355 public void throwBugException(String message) throws BugException {
356 BugException e = new BugException(message);
357 log(createLogLine(0, LogLevel.ERROR, message, e));
362 * Instantiates, logs and throws a BugException. The message is logged at
363 * ERROR level with the specified cause.
365 * This method never returns normally.
367 * @param message the message for the log and exception.
368 * @param cause the causing exception (may be null).
369 * @throws BugException always.
371 public void throwBugException(String message, Throwable cause) throws BugException {
372 BugException e = new BugException(message, cause);
373 log(createLogLine(0, LogLevel.ERROR, message, cause));
381 * Create a LogLine object from the provided information. This method must be
382 * called directly from the called method in order for the trace position
385 * @param additionalLevels how many additional stack trace levels to include on the line.
386 * @param level the log level.
387 * @param message the log message (null ok).
388 * @param cause the log exception (null ok).
390 * @return a LogLine populated with all necessary fields.
392 private LogLine createLogLine(int additionalLevels, LogLevel level, String message,
394 TraceException trace;
395 if (level.atLeast(TRACING_LOG_LEVEL)) {
396 trace = new TraceException(2, 2 + additionalLevels);
400 return new LogLine(level, trace, message, cause);