DGP - merged printing support from branch
[debian/openrocket] / src / net / sf / openrocket / logging / LogHelper.java
index 8ddba5b69cbc37b1cbf48d52d9ce4bd904bfc0d1..d6b52104ba8307966504c489f886556d008c73b3 100644 (file)
@@ -16,13 +16,23 @@ import net.sf.openrocket.util.BugException;
  *  <li><code>message</code>   the String message (may be null).
  *  <li><code>cause</code>             the exception that caused this log (may be null).
  * </ul>
+ * <p>
+ * The logging methods are guaranteed never to throw an exception, and can thus be safely
+ * used in finally blocks.
  * 
  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
  */
 public abstract class LogHelper {
+       /**
+        * Level from which upward a TraceException is added to the log lines.
+        */
+       private static final LogLevel TRACING_LOG_LEVEL =
+                       LogLevel.fromString(System.getProperty("openrocket.log.tracelevel"), LogLevel.INFO);
        
        private static final DelegatorLogger delegator = new DelegatorLogger();
        
+       
+
        /**
         * Get the logger to be used in logging.
         * 
@@ -34,9 +44,71 @@ public abstract class LogHelper {
        
        
 
+       /**
+        * Log a LogLine object.  This method needs to be able to cope with multiple threads
+        * accessing it concurrently (for example by being synchronized).
+        * 
+        * @param line  the LogLine to log.
+        */
        public abstract void log(LogLine line);
        
        
+       /**
+        * Log using VBOSE level.
+        * 
+        * @param message       the logged message (may be null).
+        */
+       public void verbose(String message) {
+               try {
+                       log(createLogLine(0, LogLevel.VBOSE, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       /**
+        * Log using VBOSE level.
+        * 
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void verbose(String message, Throwable cause) {
+               try {
+                       log(createLogLine(0, LogLevel.VBOSE, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       /**
+        * Log using VBOSE level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        */
+       public void verbose(int levels, String message) {
+               try {
+                       log(createLogLine(levels, LogLevel.VBOSE, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       /**
+        * Log using VBOSE level.
+        * 
+        * @param levels        number of additional levels of stack trace to include.
+        * @param message       the logged message (may be null).
+        * @param cause         the causing exception (may be null).
+        */
+       public void verbose(int levels, String message, Throwable cause) {
+               try {
+                       log(createLogLine(levels, LogLevel.VBOSE, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+       
        
        /**
         * Log using DEBUG level.
@@ -44,7 +116,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void debug(String message) {
-               log(createLogLine(0, LogLevel.DEBUG, message, null));
+               try {
+                       log(createLogLine(0, LogLevel.DEBUG, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -54,7 +130,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void debug(String message, Throwable cause) {
-               log(createLogLine(0, LogLevel.DEBUG, message, cause));
+               try {
+                       log(createLogLine(0, LogLevel.DEBUG, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -64,7 +144,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void debug(int levels, String message) {
-               log(createLogLine(levels, LogLevel.DEBUG, message, null));
+               try {
+                       log(createLogLine(levels, LogLevel.DEBUG, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -75,7 +159,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void debug(int levels, String message, Throwable cause) {
-               log(createLogLine(levels, LogLevel.DEBUG, message, cause));
+               try {
+                       log(createLogLine(levels, LogLevel.DEBUG, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        
@@ -85,7 +173,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void info(String message) {
-               log(createLogLine(0, LogLevel.INFO, message, null));
+               try {
+                       log(createLogLine(0, LogLevel.INFO, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -95,7 +187,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void info(String message, Throwable cause) {
-               log(createLogLine(0, LogLevel.INFO, message, cause));
+               try {
+                       log(createLogLine(0, LogLevel.INFO, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -105,7 +201,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void info(int levels, String message) {
-               log(createLogLine(levels, LogLevel.INFO, message, null));
+               try {
+                       log(createLogLine(levels, LogLevel.INFO, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -116,7 +216,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void info(int levels, String message, Throwable cause) {
-               log(createLogLine(levels, LogLevel.INFO, message, cause));
+               try {
+                       log(createLogLine(levels, LogLevel.INFO, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        
@@ -126,7 +230,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void user(String message) {
-               log(createLogLine(0, LogLevel.USER, message, null));
+               try {
+                       log(createLogLine(0, LogLevel.USER, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -136,7 +244,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void user(String message, Throwable cause) {
-               log(createLogLine(0, LogLevel.USER, message, cause));
+               try {
+                       log(createLogLine(0, LogLevel.USER, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -146,7 +258,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void user(int levels, String message) {
-               log(createLogLine(levels, LogLevel.USER, message, null));
+               try {
+                       log(createLogLine(levels, LogLevel.USER, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -157,7 +273,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void user(int levels, String message, Throwable cause) {
-               log(createLogLine(levels, LogLevel.USER, message, cause));
+               try {
+                       log(createLogLine(levels, LogLevel.USER, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        
@@ -167,7 +287,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void warn(String message) {
-               log(createLogLine(0, LogLevel.WARN, message, null));
+               try {
+                       log(createLogLine(0, LogLevel.WARN, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -177,7 +301,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void warn(String message, Throwable cause) {
-               log(createLogLine(0, LogLevel.WARN, message, cause));
+               try {
+                       log(createLogLine(0, LogLevel.WARN, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -187,7 +315,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void warn(int levels, String message) {
-               log(createLogLine(levels, LogLevel.WARN, message, null));
+               try {
+                       log(createLogLine(levels, LogLevel.WARN, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -198,7 +330,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void warn(int levels, String message, Throwable cause) {
-               log(createLogLine(levels, LogLevel.WARN, message, cause));
+               try {
+                       log(createLogLine(levels, LogLevel.WARN, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        
@@ -208,7 +344,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void error(String message) {
-               log(createLogLine(0, LogLevel.ERROR, message, null));
+               try {
+                       log(createLogLine(0, LogLevel.ERROR, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -218,7 +358,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void error(String message, Throwable cause) {
-               log(createLogLine(0, LogLevel.ERROR, message, cause));
+               try {
+                       log(createLogLine(0, LogLevel.ERROR, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -228,7 +372,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void error(int levels, String message) {
-               log(createLogLine(levels, LogLevel.ERROR, message, null));
+               try {
+                       log(createLogLine(levels, LogLevel.ERROR, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -239,11 +387,15 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void error(int levels, String message, Throwable cause) {
-               log(createLogLine(levels, LogLevel.ERROR, message, cause));
+               try {
+                       log(createLogLine(levels, LogLevel.ERROR, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        
-       
+
        /**
         * Log using the provided log level.
         * 
@@ -251,7 +403,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void log(LogLevel level, String message) {
-               log(createLogLine(0, level, message, null));
+               try {
+                       log(createLogLine(0, level, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -262,7 +418,11 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void log(LogLevel level, String message, Throwable cause) {
-               log(createLogLine(0, level, message, cause));
+               try {
+                       log(createLogLine(0, level, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -273,7 +433,11 @@ public abstract class LogHelper {
         * @param message       the logged message (may be null).
         */
        public void log(int levels, LogLevel level, String message) {
-               log(createLogLine(levels, level, message, null));
+               try {
+                       log(createLogLine(levels, level, message, null));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        /**
@@ -285,11 +449,15 @@ public abstract class LogHelper {
         * @param cause         the causing exception (may be null).
         */
        public void log(int levels, LogLevel level, String message, Throwable cause) {
-               log(createLogLine(levels, level, message, cause));
+               try {
+                       log(createLogLine(levels, level, message, cause));
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
        }
        
        
-       
+
        /**
         * Instantiates, logs and throws a BugException.  The message is logged at
         * ERROR level.
@@ -323,7 +491,7 @@ public abstract class LogHelper {
        
        
 
-       
+
        /**
         * Create a LogLine object from the provided information.  This method must be
         * called directly from the called method in order for the trace position
@@ -336,9 +504,14 @@ public abstract class LogHelper {
         * 
         * @return                                      a LogLine populated with all necessary fields.
         */
-       private LogLine createLogLine(int additionalLevels, LogLevel level, String message, 
+       private LogLine createLogLine(int additionalLevels, LogLevel level, String message,
                        Throwable cause) {
-               TraceException trace = new TraceException(2, 2 + additionalLevels);
+               TraceException trace;
+               if (level.atLeast(TRACING_LOG_LEVEL)) {
+                       trace = new TraceException(2, 2 + additionalLevels);
+               } else {
+                       trace = null;
+               }
                return new LogLine(level, trace, message, cause);
        }
 }