X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Flog%2FJLogger.java;fp=src%2Fjalview%2Flog%2FJLogger.java;h=45dde90cf0c04409b630377493a353581259a5c0;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=0000000000000000000000000000000000000000;hpb=49db0dff1da16c3355b43a41498c1fc93ef47e91;p=jalview.git diff --git a/src/jalview/log/JLogger.java b/src/jalview/log/JLogger.java new file mode 100644 index 0000000..45dde90 --- /dev/null +++ b/src/jalview/log/JLogger.java @@ -0,0 +1,216 @@ +/* + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.log; + +import java.util.HashMap; +import java.util.Map; + +import jalview.bin.Console; +import jalview.util.Platform; + +public abstract class JLogger implements JLoggerI +{ + protected String name; + + protected LogLevel level; + + private Object logger = null; + + private static Map registry = new HashMap<>(); + + // implement these abstract methods + protected abstract void loggerSetup(); + + public abstract boolean loggerExists(); + + protected abstract void loggerSetLevel(LogLevel level); + + protected abstract void loggerLogMessage(LogLevel level, String message, + Throwable t); + + public static LogLevel toLevel(String levelString) + { + try + { + return LogLevel.valueOf(levelString); + } catch (IllegalArgumentException e) + { + Console.error("Could not parse LogLevel '" + levelString + "'", e); + return LogLevel.INFO; + } + } + + public static JLogger getLogger(Class c) + { + return getLogger(c); + } + + public static JLogger getLogger(Class c, LogLevel loglevel) + { + return getLogger(c.getCanonicalName(), loglevel); + } + + public static JLogger getLogger(String name) + { + return getLogger(name, LogLevel.INFO); + } + + public static JLogger getLogger(String name, LogLevel loglevel) + { + return registry.containsKey(name) ? (JLogger) registry.get(name) : null; + } + + protected JLogger() + { + } + + protected JLogger(String name, LogLevel level) + { + this.name = name; + this.level = level; + this.loggerSetup(); + this.registryStore(); + } + + protected void registryStore() + { + registry.put(this.name, this); + } + + protected static boolean registryContainsKey(String name) + { + return registry.containsKey(name); + } + + protected static JLogger registryGet(String name) + { + return registry.get(name); + } + + public LogLevel getLevel() + { + return this.level; + } + + public void setLevel(LogLevel level) + { + this.level = level; + if (loggerExists()) + loggerSetLevel(level); + } + + private boolean println(LogLevel loglevel, String message, Throwable t) + { + if (loglevel.compareTo(this.level) < 0) + { + return false; + } + if (!loggerExists() || Platform.isJS()) + { + String logLine = String.format("%s: %s", loglevel.toString(), + message); + System.out.println(logLine); + if (t != null) + { + if (loglevel.compareTo(LogLevel.DEBUG) <= 0) + t.printStackTrace(System.err); + else + System.err.println(t.getMessage()); + } + return false; + } + else + { + loggerLogMessage(loglevel, message, t); + return true; + } + } + + public void trace(String message) + { + trace(message, null); + } + + public void trace(String message, Throwable t) + { + println(LogLevel.TRACE, message, t); + } + + public void debug(String message) + { + debug(message, null); + } + + public void debug(String message, Throwable t) + { + println(LogLevel.DEBUG, message, t); + } + + public void info(String message) + { + info(message, null); + } + + public void info(String message, Throwable t) + { + println(LogLevel.INFO, message, t); + } + + public void warn(String message) + { + warn(message, null); + } + + public void warn(String message, Throwable t) + { + println(LogLevel.WARN, message, t); + } + + public void error(String message) + { + error(message, null); + } + + public void error(String message, Throwable t) + { + println(LogLevel.ERROR, message, t); + } + + public void fatal(String message) + { + fatal(message, null); + } + + public void fatal(String message, Throwable t) + { + println(LogLevel.FATAL, message, t); + } + + public boolean isDebugEnabled() + { + return level.compareTo(LogLevel.DEBUG) <= 0; + } + + public boolean isTraceEnabled() + { + return level.compareTo(LogLevel.TRACE) <= 0; + } +}