Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / src / jalview / bin / Console.java
index 3e09d07..1bb8162 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.bin;
 
+import java.io.PrintStream;
+
 import jalview.log.JLogger;
 import jalview.log.JLoggerI.LogLevel;
 import jalview.log.JLoggerLog4j;
@@ -40,8 +42,8 @@ public class Console
     }
     else
     {
-      System.out.println(message);
-      t.printStackTrace();
+      outPrintln(message);
+      Console.printStackTrace(t);
     }
 
   }
@@ -54,7 +56,7 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outPrintln(message);
     }
 
   }
@@ -67,8 +69,8 @@ public class Console
     }
     else
     {
-      System.out.println(message);
-      t.printStackTrace();
+      outPrintln(message);
+      Console.printStackTrace(t);
     }
   }
 
@@ -80,7 +82,7 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outPrintln(message);
     }
 
   }
@@ -93,8 +95,8 @@ public class Console
     }
     else
     {
-      System.out.println(message);
-      t.printStackTrace();
+      outPrintln(message);
+      Console.printStackTrace(t);
     }
 
   }
@@ -107,7 +109,7 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outPrintln(message);
     }
 
   }
@@ -120,7 +122,7 @@ public class Console
     }
     else
     {
-      System.out.println(message);
+      outPrintln(message);
     }
   }
 
@@ -132,8 +134,8 @@ public class Console
     }
     else
     {
-      System.out.println(message);
-      t.printStackTrace();
+      outPrintln(message);
+      Console.printStackTrace(t);
     }
 
   }
@@ -146,7 +148,7 @@ public class Console
     }
     else
     {
-      System.err.println(message);
+      jalview.bin.Console.errPrintln(message);
     }
 
   }
@@ -159,8 +161,8 @@ public class Console
     }
     else
     {
-      System.err.println(message);
-      t.printStackTrace(System.err);
+      jalview.bin.Console.errPrintln(message);
+      Console.printStackTrace(t);
     }
 
   }
@@ -173,7 +175,7 @@ public class Console
     }
     else
     {
-      System.err.println(message);
+      jalview.bin.Console.errPrintln(message);
     }
 
   }
@@ -186,8 +188,8 @@ public class Console
     }
     else
     {
-      System.err.println(message);
-      t.printStackTrace(System.err);
+      jalview.bin.Console.errPrintln(message);
+      Console.printStackTrace(t);
     }
 
   }
@@ -209,39 +211,70 @@ 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 (providedLogLevel != null && JLogger.isLevel(providedLogLevel))
+      {
+        logLevel = Console.getLogLevel(providedLogLevel);
+      }
+      else
+      {
+        logLevel = getCachedLogLevel();
+      }
+
       if (!Platform.isJS())
       {
-        Log4j.init(cachedLevel);
+        if (!Jalview.quiet())
+        {
+          jalview.bin.Console.errPrintln(
+                  "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();
+      jalview.bin.Console
+              .errPrintln("Could not initialise the logger framework");
+      Console.printStackTrace(e);
     }
 
     // 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
@@ -255,6 +288,118 @@ public class Console
     }
   }
 
+  public static void setLogLevel(String logLevelString)
+  {
+    LogLevel l = null;
+    try
+    {
+      l = LogLevel.valueOf(logLevelString);
+    } catch (IllegalArgumentException | NullPointerException e1)
+    {
+      Console.debug("Invalid log level '" + logLevelString + "'");
+      return;
+    }
+    if (l != null)
+    {
+      log.setLevel(l);
+      if (!Platform.isJS())
+      {
+        Log4j.init(l);
+      }
+      JLoggerLog4j.getLogger("org.apache.axis", l);
+    }
+  }
+
+  public static void outPrint()
+  {
+    outPrint("");
+  }
+
+  public static void outPrintln()
+  {
+    outPrintln("");
+  }
+
+  public static void outPrint(Object message)
+  {
+    outPrintMessage(message, false, false);
+  }
+
+  public static void outPrint(Object message, boolean forceStdout)
+  {
+    outPrintMessage(message, false, forceStdout);
+  }
+
+  public static void outPrintln(Object message)
+  {
+    outPrintMessage(message, true, false);
+  }
+
+  public static PrintStream outputStream(boolean forceStdout)
+  {
+    // send message to stderr if an output file to stdout is expected
+    if (!forceStdout && Jalview.getInstance() != null
+            && Jalview.getInstance().getBootstrapArgs() != null
+            && Jalview.getInstance().getBootstrapArgs().outputToStdout())
+    {
+      return System.err;
+    }
+    else
+    {
+      return System.out;
+    }
+  }
+
+  public static void outPrintMessage(Object message, boolean newline,
+          boolean forceStdout)
+  {
+    PrintStream ps = outputStream(forceStdout);
+    if (newline)
+    {
+      ps.println(message);
+    }
+    else
+    {
+      ps.print(message);
+    }
+  }
+
+  public static void errPrint()
+  {
+    errPrint("");
+  }
+
+  public static void errPrintln()
+  {
+    errPrintln("");
+  }
+
+  public static void errPrint(Object message)
+  {
+    System.err.print(message);
+  }
+
+  public static void errPrintln(Object message)
+  {
+    System.err.println(message);
+  }
+
+  public static void debugPrintStackTrace(Throwable t)
+  {
+    if (!isDebugEnabled())
+    {
+      return;
+    }
+    // send message to stderr if output to stdout is expected
+    printStackTrace(t);
+  }
+
+  public static void printStackTrace(Throwable t)
+  {
+    // send message to stderr if output to stdout is expected
+    t.printStackTrace(System.err);
+  }
+
   public final static String LOGGING_TEST_MESSAGE = "Logging to STDERR";
 
-}
+}
\ No newline at end of file