Hi Ede, What is it for ? Shall we use it ? Will we loose the complete stacktrace in case of errors (which is helpful for debugging) ?
Michaël Le 10/01/2016 13:01, jump-pilot-...@lists.sourceforge.net a écrit : > Revision: 4750 > http://sourceforge.net/p/jump-pilot/code/4750 > Author: edso > Date: 2016-01-10 12:01:41 +0000 (Sun, 10 Jan 2016) > Log Message: > ----------- > a generalized logger interface utilizing log4j > > Added Paths: > ----------- > core/trunk/src/com/vividsolutions/jump/workbench/Logger.java > > Added: core/trunk/src/com/vividsolutions/jump/workbench/Logger.java > =================================================================== > --- core/trunk/src/com/vividsolutions/jump/workbench/Logger.java > (rev 0) > +++ core/trunk/src/com/vividsolutions/jump/workbench/Logger.java > 2016-01-10 12:01:41 UTC (rev 4750) > @@ -0,0 +1,208 @@ > +package com.vividsolutions.jump.workbench; > + > +import java.io.File; > +import java.util.ArrayList; > +import java.util.Enumeration; > +import java.util.List; > + > +import org.apache.log4j.Appender; > +import org.apache.log4j.Category; > +import org.apache.log4j.FileAppender; > +import org.apache.log4j.Level; > + > +import com.vividsolutions.jump.I18N; > +import com.vividsolutions.jump.workbench.ui.plugin.GenerateLogPlugIn; > + > +/** > + * a generalized logger interface for OJ package usage currently based on > log4j > + * v1.2 > + * > + * @author ed > + * > + */ > +public class Logger { > + > + public static void fatal(String msg) { > + log(msg, null, Level.FATAL, new Exception().getStackTrace()[0]); > + } > + > + public static void error(String msg) { > + log(msg, null, Level.ERROR, new Exception().getStackTrace()[0]); > + } > + > + public static void warn(String msg) { > + log(msg, null, Level.WARN, new Exception().getStackTrace()[0]); > + } > + > + public static void info(String msg) { > + log(msg, null, Level.INFO, new Exception().getStackTrace()[0]); > + } > + > + public static void debug(String msg) { > + log(msg, null, Level.DEBUG, new Exception().getStackTrace()[0]); > + } > + > + public static void trace(String msg) { > + log(msg, null, Level.TRACE, new Exception().getStackTrace()[0]); > + } > + > + public static void fatal(Throwable t) { > + log(null, t, Level.FATAL, new Exception().getStackTrace()[0]); > + } > + > + public static void error(Throwable t) { > + log(null, t, Level.ERROR, new Exception().getStackTrace()[0]); > + } > + > + public static void warn(Throwable t) { > + log(null, t, Level.WARN, new Exception().getStackTrace()[0]); > + } > + > + public static void info(Throwable t) { > + log(null, t, Level.INFO, new Exception().getStackTrace()[0]); > + } > + > + public static void debug(Throwable t) { > + log(null, t, Level.DEBUG, new Exception().getStackTrace()[0]); > + } > + > + public static void trace(Throwable t) { > + log(null, t, Level.TRACE, new Exception().getStackTrace()[0]); > + } > + > + public static void fatal(String msg, Throwable t) { > + log(msg, t, Level.FATAL, new Exception().getStackTrace()[0]); > + } > + > + public static void error(String msg, Throwable t) { > + log(msg, t, Level.ERROR, new Exception().getStackTrace()[0]); > + } > + > + public static void warn(String msg, Throwable t) { > + log(msg, t, Level.WARN, new Exception().getStackTrace()[0]); > + } > + > + public static void info(String msg, Throwable t) { > + log(msg, t, Level.INFO, new Exception().getStackTrace()[0]); > + } > + > + public static void debug(String msg, Throwable t) { > + log(msg, t, Level.DEBUG, new Exception().getStackTrace()[0]); > + } > + > + public static void trace(String msg, Throwable t) { > + log(msg, t, Level.TRACE, new Exception().getStackTrace()[0]); > + } > + > + /** > + * log msg, throwable with log level from one stack before the given > + * StackTraceElement code location > + * > + * @param msg > + * @param t > + * @param logLevel > + */ > + public static void log(String msg, Throwable t, Level logLevel, > + StackTraceElement calledFrom) { > + // get caller > + StackTraceElement element = getCaller(calledFrom); > + > + org.apache.log4j.Logger logger = null; > + > + if (element != null) { > + logger = org.apache.log4j.Logger.getLogger(element.getClassName()); > + } > + > + // what's the current log level? > + Level loggerLevel = logger.getEffectiveLevel(); > + > + // only append code:line during debugging > + String msgAppend = ""; > + if (element != null && !loggerLevel.isGreaterOrEqual(Level.INFO)) > + msgAppend = " at " + element + ""; > + > + logger.log(logLevel, msg + msgAppend, t); > + } > + > + private static StackTraceElement getCaller(StackTraceElement calledFrom) { > + if (calledFrom == null) > + throw new IllegalArgumentException(); > + > + StackTraceElement[] stack = new Exception().getStackTrace(); > + boolean seenCaller = false; > + // run up the stack until we are one below the calling code (calledFrom) > + for (StackTraceElement element : stack) { > + // we saw calledFrom in the previous run, hence this must be our origin > + if (seenCaller) > + return element; > + seenCaller = element.equals(calledFrom); > + } > + > + return null; > + } > + > + /** > + * get current file appenders, mainly for display purposes eg. in > + * {@link GenerateLogPlugIn} > + * > + * @return files list > + */ > + public static List<File> getLogFiles() { > + List files = new ArrayList<File>(); > + Enumeration<Category> loggers = org.apache.log4j.LogManager > + .getCurrentLoggers(); > + while (loggers.hasMoreElements()) { > + Category logger = (Category) loggers.nextElement(); > + Enumeration<Appender> apps = logger.getAllAppenders(); > + > + while (apps.hasMoreElements()) { > + Appender app = (Appender) apps.nextElement(); > + System.out.println(app.getName()); > + if (app instanceof FileAppender) { > + // System.out.println(app); > + files.add(new File(((FileAppender) app).getFile())); > + } > + } > + } > + > + return files; > + } > + > + /** > + * setting current log level for the root logger > + * > + * @param levelString > + */ > + public static void setLevel(String levelString) { > + Level level = org.apache.log4j.Level.toLevel(levelString); > + if (level.equals(Level.DEBUG) && !levelString.equalsIgnoreCase("debug")) > + throw new IllegalArgumentException("unknown log verbosity level."); > + > + org.apache.log4j.Logger.getRootLogger().setLevel(level); > + > + info(I18N.getMessage("setting-log-level-to-{0}", level)); > + } > + > + /** > + * @return the current log level for the calling class > + */ > + public static Level getLevel() { > + // get caller > + StackTraceElement element = getCaller(new > Exception().getStackTrace()[0]); > + org.apache.log4j.Logger logger = > org.apache.log4j.Logger.getLogger(element > + .getClassName()); > + return logger.getEffectiveLevel(); > + } > + > + /** > + * @return the lo4j logger for the calling class > + */ > + public static org.apache.log4j.Logger getLogger() { > + // get caller > + StackTraceElement element = getCaller(new > Exception().getStackTrace()[0]); > + org.apache.log4j.Logger logger = > org.apache.log4j.Logger.getLogger(element > + .getClassName()); > + return logger; > + } > + > +} > > > Property changes on: > core/trunk/src/com/vividsolutions/jump/workbench/Logger.java > ___________________________________________________________________ > Added: svn:mime-type > ## -0,0 +1 ## > +text/plain > \ No newline at end of property > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel