JAL-629 More docs. Usage statement. Adjust some logging output to respect --quiet.
[jalview.git] / src / jalview / bin / Console.java
index 3e09d07..ab9ff97 100644 (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;
@@ -209,29 +212,50 @@ 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 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.getInstance().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");
@@ -241,7 +265,7 @@ public class Console
     // 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 +279,24 @@ 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 final static String LOGGING_TEST_MESSAGE = "Logging to STDERR";
 
 }