--- /dev/null
+/*
+ * 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.javascript.log4j;
+
+import jalview.javascript.log4j.spi.LoggingEvent;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+public class Logger
+{
+
+ private static Map<String, Logger> registry;
+
+ private String name;
+
+ private Level level;
+
+ private boolean enabled = true;
+
+ private boolean isEnabled;
+
+ private Appender appender;
+
+ private Logger(String name)
+ {
+ this.name = name;
+ }
+
+ public static Logger getLogger(String name)
+ {
+ if (registry == null)
+ {
+ registry = new Hashtable<>();
+ getLogger("root");
+ }
+ Logger logger = registry.get(name);
+ if (logger == null)
+ {
+ registry.put(name, logger = new Logger(name));
+ logger.setLevel(Level.INFO);
+ }
+ return logger;
+ }
+
+ public static Logger getRootLogger()
+ {
+ return getLogger("root");
+ }
+
+ public void setLevel(Level l)
+ {
+ this.level = l;
+ }
+
+ public void addAppender(Appender appender)
+ {
+ this.appender = appender;
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return isEnabled;
+ }
+
+ public void debug(Object o)
+ {
+ debug(o, null);
+ }
+
+ public void debug(Object o, Throwable e)
+ {
+ switch (level.level)
+ {
+ case Priority.FATAL_INT:
+ case Priority.ERROR_INT:
+ case Priority.WARN_INT:
+ case Priority.INFO_INT:
+ case Priority.DEBUG_INT:
+ log(o, e);
+ break;
+ }
+ }
+
+ public void info(Object o)
+ {
+ info(o, null);
+ }
+
+ public void info(Object o, Throwable e)
+ {
+ switch (level.level)
+ {
+ case Priority.FATAL_INT:
+ case Priority.ERROR_INT:
+ case Priority.WARN_INT:
+ case Priority.INFO_INT:
+ log(o, e);
+ break;
+ }
+
+ }
+
+ public void warn(Object o)
+ {
+ warn(o, null);
+ }
+
+ public void warn(Object o, Throwable e)
+ {
+ switch (level.level)
+ {
+ case Priority.FATAL_INT:
+ case Priority.ERROR_INT:
+ case Priority.WARN_INT:
+ log(o, e);
+ break;
+ }
+
+ }
+
+ public void error(Object o)
+ {
+ error(o, null);
+ }
+
+ public void error(Object o, Throwable e)
+ {
+ switch (level.level)
+ {
+ case Priority.FATAL_INT:
+ case Priority.ERROR_INT:
+ log(o, e);
+ break;
+ }
+
+ }
+
+ private void log(Object s, Throwable e)
+ {
+ switch (level.level)
+ {
+ case Priority.ERROR_INT:
+ if (appender == null)
+ {
+ System.err.println(s);
+ return;
+ }
+ break;
+ case Priority.WARN_INT:
+ if (appender == null)
+ {
+ System.err.println(s);
+ return;
+ }
+ break;
+ case Priority.INFO_INT:
+ if (appender == null)
+ {
+ System.out.println(s);
+ return;
+ }
+ break;
+ case Priority.DEBUG_INT:
+ if (appender == null)
+ {
+ System.out.println(s);
+ return;
+ }
+ break;
+ }
+ e.printStackTrace();
+ appender.append(new LoggingEvent(this, s.toString(), level));
+ }
+
+}