JAL-629 Method to use for printStackTrace
[jalview.git] / src / jalview / bin / Console.java
index 0b5a38a..a280e88 100644 (file)
@@ -1,6 +1,29 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.bin;
 
+import java.util.Locale;
+
 import jalview.log.JLogger;
+import jalview.log.JLoggerI;
 import jalview.log.JLoggerI.LogLevel;
 import jalview.log.JLoggerLog4j;
 import jalview.util.ChannelProperties;
@@ -20,10 +43,10 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
       t.printStackTrace();
     }
-  
+
   }
 
   public static void info(String message)
@@ -34,9 +57,9 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
     }
-  
+
   }
 
   public static void trace(String message, Throwable t)
@@ -47,7 +70,7 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
       t.printStackTrace();
     }
   }
@@ -60,9 +83,9 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
     }
-  
+
   }
 
   public static void info(String message, Throwable t)
@@ -73,10 +96,10 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
       t.printStackTrace();
     }
-  
+
   }
 
   public static void warn(String message)
@@ -87,9 +110,9 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
     }
-  
+
   }
 
   public static void trace(String message)
@@ -100,7 +123,7 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
     }
   }
 
@@ -112,10 +135,10 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outputMessage(message);
       t.printStackTrace();
     }
-  
+
   }
 
   public static void error(String message)
@@ -128,7 +151,7 @@ public class Console
     {
       System.err.println(message);
     }
-  
+
   }
 
   public static void error(String message, Throwable t)
@@ -142,7 +165,7 @@ public class Console
       System.err.println(message);
       t.printStackTrace(System.err);
     }
-  
+
   }
 
   public static void fatal(String message)
@@ -155,7 +178,7 @@ public class Console
     {
       System.err.println(message);
     }
-  
+
   }
 
   public static void fatal(String message, Throwable t)
@@ -169,7 +192,7 @@ public class Console
       System.err.println(message);
       t.printStackTrace(System.err);
     }
-  
+
   }
 
   public static boolean isDebugEnabled()
@@ -189,39 +212,69 @@ public class Console
 
   public static JLogger.LogLevel getCachedLogLevel(String key)
   {
-    return JLogger.toLevel(Cache.getDefault(key, "INFO"));
+    return getLogLevel(Cache.getDefault(key, "INFO"));
+  }
+
+  public static JLogger.LogLevel getLogLevel(String level)
+  {
+    return JLogger.toLevel(level);
+  }
+
+  public static JLogger getLogger()
+  {
+    return log;
   }
 
   public static boolean initLogger()
   {
+    return initLogger(null);
+  }
+
+  public static boolean initLogger(String providedLogLevel)
+  {
     if (log != null)
     {
       return true;
     }
     try
     {
-      JLogger.LogLevel cachedLevel = getCachedLogLevel();
+      JLogger.LogLevel logLevel = JLogger.LogLevel.INFO;
+
+      if (JLogger.isLevel(providedLogLevel))
+      {
+        logLevel = Console.getLogLevel(providedLogLevel);
+      }
+      else
+      {
+        logLevel = getCachedLogLevel();
+      }
+
       if (!Platform.isJS())
       {
-        Log4j.init(cachedLevel);
+        if (!Jalview.quiet())
+        {
+          System.err.println(
+                  "Setting initial log level to " + logLevel.name());
+        }
+        Log4j.init(logLevel);
       }
       // log output
       // is laxis used? Does getLogger do anything without a Logger object?
       // Logger laxis = Log4j.getLogger("org.apache.axis", myLevel);
-      JLoggerLog4j.getLogger("org.apache.axis", cachedLevel);
-  
+      JLoggerLog4j.getLogger("org.apache.axis", logLevel);
+
       // The main application logger
-      log = JLoggerLog4j.getLogger(Cache.JALVIEW_LOGGER_NAME, cachedLevel);
+      log = JLoggerLog4j.getLogger(Cache.JALVIEW_LOGGER_NAME, logLevel);
     } catch (NoClassDefFoundError e)
     {
       System.err.println("Could not initialise the logger framework");
       e.printStackTrace();
     }
-  
+
     // Test message
     if (log != null)
     {
-      // Logging test message should got through the logger object
+      // Logging test message should go through the logger object
       if (log.loggerExists())
         log.debug(Console.LOGGING_TEST_MESSAGE);
       // Tell the user that debug is enabled
@@ -235,6 +288,45 @@ public class Console
     }
   }
 
+  public static void setLogLevel(String logLevelString)
+  {
+    for (LogLevel logLevel : JLoggerI.LogLevel.values())
+    {
+      if (logLevel.toString().toLowerCase(Locale.ROOT)
+              .equals(logLevelString.toLowerCase(Locale.ROOT)))
+      {
+        log.setLevel(logLevel);
+        if (!Platform.isJS())
+        {
+          Log4j.init(logLevel);
+        }
+        JLoggerLog4j.getLogger("org.apache.axis", logLevel);
+        break;
+      }
+    }
+  }
+
+  public static void outputMessage(String message)
+  {
+    // send message to stderr if output to stdout is expected
+    if (Jalview.getInstance() != null
+            && Jalview.getInstance().bootstrapArgs != null
+            && Jalview.getInstance().bootstrapArgs.outputToStdout())
+    {
+      System.err.println(message);
+    }
+    else
+    {
+      System.out.println(message);
+    }
+  }
+
+  public static void printStackTrace(Exception e)
+  {
+    // send message to stderr if output to stdout is expected
+    e.printStackTrace(System.err);
+  }
+
   public final static String LOGGING_TEST_MESSAGE = "Logging to STDERR";
 
 }