From 1c4c37962746f526928b8d4579a28146d7e90cb9 Mon Sep 17 00:00:00 2001 From: Jamie Doornbos Date: Tue, 27 May 2014 14:41:54 -0700 Subject: [PATCH] Support log4j 2.x. This is an RC dependency. We can update that when log4j 2.0 is release, but that shouldn't be necessary. --- pom.xml | 7 +++ .../com/samskivert/util/Log4J2Logger.java | 56 +++++++++++++++++++ src/main/java/com/samskivert/util/Logger.java | 11 ++++ 3 files changed, 74 insertions(+) create mode 100644 src/main/java/com/samskivert/util/Log4J2Logger.java diff --git a/pom.xml b/pom.xml index 7d18e016..300e60fe 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,13 @@ compile true + + org.apache.logging.log4j + log4j-api + 2.0-rc1 + compile + true + javax.mail mail diff --git a/src/main/java/com/samskivert/util/Log4J2Logger.java b/src/main/java/com/samskivert/util/Log4J2Logger.java new file mode 100644 index 00000000..a07d35be --- /dev/null +++ b/src/main/java/com/samskivert/util/Log4J2Logger.java @@ -0,0 +1,56 @@ +// +// samskivert library - useful routines for java programs +// Copyright (C) 2001-2012 Michael Bayne, et al. +// http://github.com/samskivert/samskivert/blob/master/COPYING + +package com.samskivert.util; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; + +/** + * A factory for creating log4j2 logger implementations. + */ +public class Log4J2Logger implements Logger.Factory +{ + // from interface Logger.Factory + public void init () + { + } + + // from interface Logger.Factory + public Logger getLogger (String name) + { + return new Impl(LogManager.getLogger(name)); + } + + // from interface Logger.Factory + public Logger getLogger (Class clazz) + { + return new Impl(LogManager.getLogger(clazz)); + } + + protected static class Impl extends Logger + { + public Impl (org.apache.logging.log4j.Logger impl) + { + _impl = impl; + } + + @Override // from Logger + protected boolean shouldLog (int levIdx) + { + return _impl.isEnabled(LEVELS[levIdx]); + } + + @Override // from Logger + protected void doLog (int levIdx, String formatted, Throwable throwable) + { + _impl.log(LEVELS[levIdx], formatted, throwable); + } + + protected final org.apache.logging.log4j.Logger _impl; + protected static final Level[] LEVELS = { + Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR }; + } +} diff --git a/src/main/java/com/samskivert/util/Logger.java b/src/main/java/com/samskivert/util/Logger.java index bb7a4f53..91e769fe 100644 --- a/src/main/java/com/samskivert/util/Logger.java +++ b/src/main/java/com/samskivert/util/Logger.java @@ -178,6 +178,17 @@ public abstract class Logger System.err.println("Unable to instantiate Log4JLogger: " + t); } + // create and a log4j2 logger if the log4j2 configuration system property is set + try { + if (factory == null && System.getProperty("log4j.configurationFile") != null) { + factory = (Factory)Class.forName("com.samskivert.util.Log4J2Logger").newInstance(); + } + } catch (SecurityException se) { + // in a sandbox, no biggie + } catch (Throwable t) { + System.err.println("Unable to instantiate Log4J2Logger: " + t); + } + // lastly, fall back to the Java logging system if (factory == null) { factory = new JDK14Logger();