package rescuecore2.log; import org.apache.log4j.LogManager; import org.apache.log4j.NDC; import java.util.Deque; import java.util.ArrayDeque; /** System-wide logging facilities. */ public final class Logger { private static final InheritableThreadLocal<Deque<org.apache.log4j.Logger>> LOG = new InheritableThreadLocal<Deque<org.apache.log4j.Logger>>() { @Override protected Deque<org.apache.log4j.Logger> initialValue() { return new ArrayDeque<org.apache.log4j.Logger>(); } @Override protected Deque<org.apache.log4j.Logger> childValue(Deque<org.apache.log4j.Logger> parent) { return new ArrayDeque<org.apache.log4j.Logger>(parent); } }; private Logger() { } /** Set the log context for this thread and all child threads. @param context The new log context. */ public static void setLogContext(String context) { Deque<org.apache.log4j.Logger> queue = LOG.get(); queue.clear(); queue.addLast(LogManager.getLogger(context)); } /** Push a log context onto the stack. @param context The new log context. */ public static void pushLogContext(String context) { Deque<org.apache.log4j.Logger> queue = LOG.get(); queue.addLast(LogManager.getLogger(context)); } /** Pop a log context from the stack. */ public static void popLogContext() { Deque<org.apache.log4j.Logger> queue = LOG.get(); queue.removeLast(); } private static org.apache.log4j.Logger get() { Deque<org.apache.log4j.Logger> queue = LOG.get(); if (queue.isEmpty()) { return LogManager.getRootLogger(); } return queue.getLast(); } /** Push an item onto the nested diagnostic context. @param s The item to push. */ public static void pushNDC(String s) { NDC.push(s); } /** Pop an item from the nested diagnostic context. */ public static void popNDC() { NDC.pop(); } /** Log a trace level message. @param msg The message to log. */ public static void trace(String msg) { get().trace(msg); } /** Log a trace level message along with a throwable. @param msg The message to log. @param t The throwable stack trace to log. */ public static void trace(String msg, Throwable t) { get().trace(msg, t); } /** Log a debug level message. @param msg The message to log. */ public static void debug(String msg) { get().debug(msg); } /** Log a debug level message along with a throwable. @param msg The message to log. @param t The throwable stack trace to log. */ public static void debug(String msg, Throwable t) { get().debug(msg, t); } /** Log an info level message. @param msg The message to log. */ public static void info(String msg) { get().info(msg); } /** Log an info level message along with a throwable. @param msg The message to log. @param t The throwable stack trace to log. */ public static void info(String msg, Throwable t) { get().info(msg, t); } /** Log a warn level message. @param msg The message to log. */ public static void warn(String msg) { get().warn(msg); } /** Log a warn level message along with a throwable. @param msg The message to log. @param t The throwable stack trace to log. */ public static void warn(String msg, Throwable t) { get().warn(msg, t); } /** Log an error level message. @param msg The message to log. */ public static void error(String msg) { get().error(msg); } /** Log an error level message along with a throwable. @param msg The message to log. @param t The throwable stack trace to log. */ public static void error(String msg, Throwable t) { get().error(msg, t); } /** Log a fatal level message. @param msg The message to log. */ public static void fatal(String msg) { get().fatal(msg); } /** Log a fatal level message along with a throwable. @param msg The message to log. @param t The throwable stack trace to log. */ public static void fatal(String msg, Throwable t) { get().fatal(msg, t); } }