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 being synchronized).
48 * @param line the LogLine to log.
50 public abstract void log(LogLine line);
55 * Log using DEBUG level.
57 * @param message the logged message (may be null).
59 public void debug(String message) {
60 log(createLogLine(0, LogLevel.DEBUG, message, null));
64 * Log using DEBUG level.
66 * @param message the logged message (may be null).
67 * @param cause the causing exception (may be null).
69 public void debug(String message, Throwable cause) {
70 log(createLogLine(0, LogLevel.DEBUG, message, cause));
74 * Log using DEBUG level.
76 * @param levels number of additional levels of stack trace to include.
77 * @param message the logged message (may be null).
79 public void debug(int levels, String message) {
80 log(createLogLine(levels, LogLevel.DEBUG, message, null));
84 * Log using DEBUG level.
86 * @param levels number of additional levels of stack trace to include.
87 * @param message the logged message (may be null).
88 * @param cause the causing exception (may be null).
90 public void debug(int levels, String message, Throwable cause) {
91 log(createLogLine(levels, LogLevel.DEBUG, message, cause));
96 * Log using INFO level.
98 * @param message the logged message (may be null).
100 public void info(String message) {
101 log(createLogLine(0, LogLevel.INFO, message, null));
105 * Log using INFO level.
107 * @param message the logged message (may be null).
108 * @param cause the causing exception (may be null).
110 public void info(String message, Throwable cause) {
111 log(createLogLine(0, LogLevel.INFO, message, cause));
115 * Log using INFO level.
117 * @param levels number of additional levels of stack trace to include.
118 * @param message the logged message (may be null).
120 public void info(int levels, String message) {
121 log(createLogLine(levels, LogLevel.INFO, message, null));
125 * Log using INFO level.
127 * @param levels number of additional levels of stack trace to include.
128 * @param message the logged message (may be null).
129 * @param cause the causing exception (may be null).
131 public void info(int levels, String message, Throwable cause) {
132 log(createLogLine(levels, LogLevel.INFO, message, cause));
137 * Log using USER level.
139 * @param message the logged message (may be null).
141 public void user(String message) {
142 log(createLogLine(0, LogLevel.USER, message, null));
146 * Log using USER level.
148 * @param message the logged message (may be null).
149 * @param cause the causing exception (may be null).
151 public void user(String message, Throwable cause) {
152 log(createLogLine(0, LogLevel.USER, message, cause));
156 * Log using USER level.
158 * @param levels number of additional levels of stack trace to include.
159 * @param message the logged message (may be null).
161 public void user(int levels, String message) {
162 log(createLogLine(levels, LogLevel.USER, message, null));
166 * Log using USER level.
168 * @param levels number of additional levels of stack trace to include.
169 * @param message the logged message (may be null).
170 * @param cause the causing exception (may be null).
172 public void user(int levels, String message, Throwable cause) {
173 log(createLogLine(levels, LogLevel.USER, message, cause));
178 * Log using WARN level.
180 * @param message the logged message (may be null).
182 public void warn(String message) {
183 log(createLogLine(0, LogLevel.WARN, message, null));
187 * Log using WARN level.
189 * @param message the logged message (may be null).
190 * @param cause the causing exception (may be null).
192 public void warn(String message, Throwable cause) {
193 log(createLogLine(0, LogLevel.WARN, message, cause));
197 * Log using WARN level.
199 * @param levels number of additional levels of stack trace to include.
200 * @param message the logged message (may be null).
202 public void warn(int levels, String message) {
203 log(createLogLine(levels, LogLevel.WARN, message, null));
207 * Log using WARN level.
209 * @param levels number of additional levels of stack trace to include.
210 * @param message the logged message (may be null).
211 * @param cause the causing exception (may be null).
213 public void warn(int levels, String message, Throwable cause) {
214 log(createLogLine(levels, LogLevel.WARN, message, cause));
219 * Log using ERROR level.
221 * @param message the logged message (may be null).
223 public void error(String message) {
224 log(createLogLine(0, LogLevel.ERROR, message, null));
228 * Log using ERROR level.
230 * @param message the logged message (may be null).
231 * @param cause the causing exception (may be null).
233 public void error(String message, Throwable cause) {
234 log(createLogLine(0, LogLevel.ERROR, message, cause));
238 * Log using ERROR level.
240 * @param levels number of additional levels of stack trace to include.
241 * @param message the logged message (may be null).
243 public void error(int levels, String message) {
244 log(createLogLine(levels, LogLevel.ERROR, message, null));
248 * Log using ERROR level.
250 * @param levels number of additional levels of stack trace to include.
251 * @param message the logged message (may be null).
252 * @param cause the causing exception (may be null).
254 public void error(int levels, String message, Throwable cause) {
255 log(createLogLine(levels, LogLevel.ERROR, message, cause));
261 * Log using the provided log level.
263 * @param level the logging level.
264 * @param message the logged message (may be null).
266 public void log(LogLevel level, String message) {
267 log(createLogLine(0, level, message, null));
271 * Log using the provided log level.
273 * @param level the logging level.
274 * @param message the logged message (may be null).
275 * @param cause the causing exception (may be null).
277 public void log(LogLevel level, String message, Throwable cause) {
278 log(createLogLine(0, level, message, cause));
282 * Log using the provided log level.
284 * @param levels number of additional levels of stack trace to include.
285 * @param level the logging level.
286 * @param message the logged message (may be null).
288 public void log(int levels, LogLevel level, String message) {
289 log(createLogLine(levels, level, message, null));
293 * Log using the provided log level.
295 * @param levels number of additional levels of stack trace to include.
296 * @param level the logging level.
297 * @param message the logged message (may be null).
298 * @param cause the causing exception (may be null).
300 public void log(int levels, LogLevel level, String message, Throwable cause) {
301 log(createLogLine(levels, level, message, cause));
307 * Instantiates, logs and throws a BugException. The message is logged at
310 * This method never returns normally.
312 * @param message the message for the log and exception.
313 * @throws BugException always.
315 public void throwBugException(String message) throws BugException {
316 BugException e = new BugException(message);
317 log(createLogLine(0, LogLevel.ERROR, message, e));
322 * Instantiates, logs and throws a BugException. The message is logged at
323 * ERROR level with the specified cause.
325 * This method never returns normally.
327 * @param message the message for the log and exception.
328 * @param cause the causing exception (may be null).
329 * @throws BugException always.
331 public void throwBugException(String message, Throwable cause) throws BugException {
332 BugException e = new BugException(message, cause);
333 log(createLogLine(0, LogLevel.ERROR, message, cause));
341 * Create a LogLine object from the provided information. This method must be
342 * called directly from the called method in order for the trace position
345 * @param additionalLevels how many additional stack trace levels to include on the line.
346 * @param level the log level.
347 * @param message the log message (null ok).
348 * @param cause the log exception (null ok).
350 * @return a LogLine populated with all necessary fields.
352 private LogLine createLogLine(int additionalLevels, LogLevel level, String message,
354 TraceException trace;
355 if (level.atLeast(TRACING_LOG_LEVEL)) {
356 trace = new TraceException(2, 2 + additionalLevels);
360 return new LogLine(level, trace, message, cause);