JAL-3949 Complete new abstracted logging framework in jalview.log. Updated log calls...
[jalview.git] / src / jalview / log / JLoggerLog4j.java
diff --git a/src/jalview/log/JLoggerLog4j.java b/src/jalview/log/JLoggerLog4j.java
new file mode 100644 (file)
index 0000000..ca24e30
--- /dev/null
@@ -0,0 +1,137 @@
+package jalview.log;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+
+import jalview.util.Log4j;
+import jalview.util.Platform;
+
+public class JLoggerLog4j extends JLogger implements JLoggerI
+{
+  private Logger logger = null;
+
+  public static JLoggerLog4j getLogger(String name)
+  {
+    return getLogger(name, LogLevel.INFO);
+  }
+
+  public static JLoggerLog4j getLogger(String name, LogLevel loglevel)
+  {
+    return registryContainsKey(name) ? (JLoggerLog4j) registryGet(name)
+            : new JLoggerLog4j(name, loglevel);
+  }
+
+  private JLoggerLog4j(String name, LogLevel level)
+  {
+    // super(name, level);
+    this.name = name;
+    this.level = level;
+    this.loggerSetup();
+    this.registryStore();
+  }
+
+  @Override
+  protected void loggerSetup()
+  {
+    if (!Platform.isJS())
+      this.logger = Log4j.isInit() ? Log4j.getLogger(this.name, this.level)
+              : null;
+  }
+
+  @Override
+  public boolean loggerExists()
+  {
+    return logger != null;
+  }
+
+  @Override
+  protected void loggerSetLevel(JLoggerI.LogLevel level)
+  {
+    if (loggerExists())
+    {
+      Log4j.setLevel(logger, level);
+    }
+  }
+
+  @Override
+  protected void loggerLogMessage(LogLevel level, String message,
+          Throwable t)
+  {
+    if (!loggerExists())
+      return;
+    if (t != null)
+    {
+      switch (level)
+      {
+      case FATAL:
+        logger.fatal(message, t);
+        break;
+      case ERROR:
+        logger.error(message, t);
+        break;
+      case WARN:
+        logger.warn(message, t);
+        break;
+      case INFO:
+        logger.info(message, t);
+        break;
+      case DEBUG:
+        logger.debug(message, t);
+        break;
+      case TRACE:
+        logger.trace(message, t);
+        break;
+      case ALL:
+        logger.trace(message, t);
+        break;
+      }
+    }
+    else
+    {
+      switch (level)
+      {
+      case FATAL:
+        logger.fatal(message);
+        break;
+      case ERROR:
+        logger.error(message);
+        break;
+      case WARN:
+        logger.warn(message);
+        break;
+      case INFO:
+        logger.info(message);
+        break;
+      case DEBUG:
+        logger.debug(message);
+        break;
+      case TRACE:
+        logger.trace(message);
+        break;
+      case ALL:
+        logger.trace(message);
+        break;
+      }
+    }
+  }
+
+  private Logger getLoggerObject()
+  {
+    return this.logger;
+  }
+
+  public synchronized static void addAppender(JLoggerLog4j l1,
+          Appender appender)
+  {
+    if (!Platform.isJS())
+      Log4j.addAppender(l1.getLoggerObject(), appender);
+  }
+
+  public synchronized static void addAppender(JLoggerLog4j l1,
+          JLoggerLog4j l2, String name)
+  {
+    if (!Platform.isJS())
+      Log4j.addAppender(l1.getLoggerObject(), l2.getLoggerObject(), name);
+  }
+
+}