I see. Thanks for the clarification. I did not understand why we need custom log4j levels FINE and FINEST, when these JUL levels are mapped to DEBUG and TRACE though.
On Wed, Sep 10, 2014 at 11:29 PM, Matt Sicker <[email protected]> wrote: > I put them in the translator in case extensions wanted to use them. > > > On 10 September 2014 02:15, Remko Popma <[email protected]> wrote: > >> Nice! >> >> Shall we move the remaining level constants to DefaultLevelConverter? >> Also, do we need to define custom log4j levels FINE and FINEST? I thought >> it might be good to remove them since these JUL levels already map to >> built-in log4j levels DEBUG and TRACE. >> >> Sent from my iPhone >> >> > On 2014/09/10, at 15:44, [email protected] wrote: >> > >> > Update LevelTranslator to use LevelConverter interface. >> > >> > >> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >> > Commit: >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/07e6faa3 >> > Tree: >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/07e6faa3 >> > Diff: >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/07e6faa3 >> > >> > Branch: refs/heads/master >> > Commit: 07e6faa32656571f18358e834e36b0a76d9917e6 >> > Parents: dc8be98 >> > Author: Matt Sicker <[email protected]> >> > Authored: Wed Sep 10 01:39:57 2014 -0500 >> > Committer: Matt Sicker <[email protected]> >> > Committed: Wed Sep 10 01:39:57 2014 -0500 >> > >> > ---------------------------------------------------------------------- >> > .../logging/log4j/jul/LevelTranslator.java | 98 >> ++++++-------------- >> > .../logging/log4j/jul/LevelTranslatorTest.java | 31 ++++--- >> > 2 files changed, 45 insertions(+), 84 deletions(-) >> > ---------------------------------------------------------------------- >> > >> > >> > >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/07e6faa3/log4j-jul/src/main/java/org/apache/logging/log4j/jul/LevelTranslator.java >> > ---------------------------------------------------------------------- >> > diff --git >> a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/LevelTranslator.java >> b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/LevelTranslator.java >> > index bc83457..8df429a 100644 >> > --- >> a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/LevelTranslator.java >> > +++ >> b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/LevelTranslator.java >> > @@ -17,10 +17,11 @@ >> > >> > package org.apache.logging.log4j.jul; >> > >> > -import java.util.IdentityHashMap; >> > -import java.util.Map; >> > - >> > import org.apache.logging.log4j.Level; >> > +import org.apache.logging.log4j.Logger; >> > +import org.apache.logging.log4j.status.StatusLogger; >> > +import org.apache.logging.log4j.util.LoaderUtil; >> > +import org.apache.logging.log4j.util.PropertiesUtil; >> > >> > /** >> > * Utility class to convert between JDK Levels and Log4j 2 Levels. >> > @@ -29,37 +30,31 @@ import org.apache.logging.log4j.Level; >> > */ >> > public final class LevelTranslator { >> > >> > - private static final int JDK_SEVERE = >> java.util.logging.Level.SEVERE.intValue(); // ERROR >> > - private static final int JDK_WARNING = >> java.util.logging.Level.WARNING.intValue(); // WARN >> > - private static final int JDK_INFO = >> java.util.logging.Level.INFO.intValue(); // INFO >> > - private static final int JDK_CONFIG = >> java.util.logging.Level.CONFIG.intValue(); // INFO >> > - private static final int JDK_FINE = >> java.util.logging.Level.FINE.intValue(); // DEBUG >> > - private static final int JDK_FINER = >> java.util.logging.Level.FINER.intValue(); // DEBUG >> > - private static final int JDK_FINEST = >> java.util.logging.Level.FINEST.intValue(); // TRACE >> > + public static final String LEVEL_CONVERTER_PROPERTY = >> "log4j.jul.levelConverter"; >> > + >> > + public static final Level FINEST = Level.forName("FINEST", >> Level.TRACE.intLevel() + 100); >> > + public static final Level FINER = Level.forName("FINER", >> Level.TRACE.intLevel()); >> > + public static final Level FINE = Level.forName("FINE", >> Level.DEBUG.intLevel()); >> > + public static final Level CONFIG = Level.forName("CONFIG", >> Level.INFO.intLevel() + 50); >> > >> > - // standard level mappings >> > - private static final Map<java.util.logging.Level, Level> >> JDK_TO_LOG4J = >> > - new IdentityHashMap<java.util.logging.Level, Level>(10); >> > - private static final Map<Level, java.util.logging.Level> >> LOG4J_TO_JDK = >> > - new IdentityHashMap<Level, java.util.logging.Level>(10); >> > + private static final Logger LOGGER = StatusLogger.getLogger(); >> > + private static final LevelConverter LEVEL_CONVERTER; >> > >> > static { >> > - JDK_TO_LOG4J.put(java.util.logging.Level.OFF, Level.OFF); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.FINEST, Level.TRACE); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.FINER, Level.DEBUG); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.FINE, Level.DEBUG); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.CONFIG, Level.INFO); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.INFO, Level.INFO); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.WARNING, Level.WARN); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.SEVERE, Level.ERROR); >> > - JDK_TO_LOG4J.put(java.util.logging.Level.ALL, Level.ALL); >> > - LOG4J_TO_JDK.put(Level.OFF, java.util.logging.Level.OFF); >> > - LOG4J_TO_JDK.put(Level.TRACE, java.util.logging.Level.FINEST); >> > - LOG4J_TO_JDK.put(Level.DEBUG, java.util.logging.Level.FINE); >> > - LOG4J_TO_JDK.put(Level.INFO, java.util.logging.Level.INFO); >> > - LOG4J_TO_JDK.put(Level.WARN, java.util.logging.Level.WARNING); >> > - LOG4J_TO_JDK.put(Level.ERROR, java.util.logging.Level.SEVERE); >> > - LOG4J_TO_JDK.put(Level.ALL, java.util.logging.Level.ALL); >> > + final String levelConverterClassName = >> > + >> PropertiesUtil.getProperties().getStringProperty(LEVEL_CONVERTER_PROPERTY); >> > + if (levelConverterClassName != null) { >> > + LevelConverter levelConverter; >> > + try { >> > + levelConverter = >> LoaderUtil.newCheckedInstanceOf(levelConverterClassName, >> LevelConverter.class); >> > + } catch (final Exception e) { >> > + LOGGER.error("Could not create custom LevelConverter >> [{}].", levelConverterClassName, e); >> > + levelConverter = new DefaultLevelConverter(); >> > + } >> > + LEVEL_CONVERTER = levelConverter; >> > + } else { >> > + LEVEL_CONVERTER = new DefaultLevelConverter(); >> > + } >> > } >> > >> > /** >> > @@ -69,40 +64,7 @@ public final class LevelTranslator { >> > * @return converted Level. >> > */ >> > public static Level toLevel(final java.util.logging.Level level) { >> > - final Level standardLevel = JDK_TO_LOG4J.get(level); >> > - if (standardLevel != null) { >> > - return standardLevel; >> > - } >> > - final int value = level.intValue(); >> > - if (value == Integer.MAX_VALUE) { >> > - return Level.OFF; >> > - } >> > - if (value == Integer.MIN_VALUE) { >> > - return Level.ALL; >> > - } >> > - if (value <= JDK_FINEST) { // up to 300 >> > - return Level.TRACE; >> > - } >> > - if (value <= JDK_FINER) { // 301 to 400 >> > - return Level.DEBUG; >> > - } >> > - if (value <= JDK_FINE) { // 401 to 500 >> > - return Level.DEBUG; >> > - } >> > - if (value <= JDK_CONFIG) { // 501 to 700 >> > - return Level.INFO; >> > - } >> > - if (value <= JDK_INFO) { // 701 to 800 >> > - return Level.INFO; >> > - } >> > - if (value <= JDK_WARNING) { // 801 to 900 >> > - return Level.WARN; >> > - } >> > - if (value <= JDK_SEVERE) { // 901 to 1000 >> > - return Level.ERROR; >> > - } >> > - // 1001+ >> > - return Level.FATAL; >> > + return LEVEL_CONVERTER.toLevel(level); >> > } >> > >> > /** >> > @@ -112,11 +74,7 @@ public final class LevelTranslator { >> > * @return converted Level. >> > */ >> > public static java.util.logging.Level toJavaLevel(final Level >> level) { >> > - final java.util.logging.Level standardLevel = >> LOG4J_TO_JDK.get(level); >> > - if (standardLevel != null) { >> > - return standardLevel; >> > - } >> > - return java.util.logging.Level.parse(level.name()); >> > + return LEVEL_CONVERTER.toJavaLevel(level); >> > } >> > >> > private LevelTranslator() { >> > >> > >> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/07e6faa3/log4j-jul/src/test/java/org/apache/logging/log4j/jul/LevelTranslatorTest.java >> > ---------------------------------------------------------------------- >> > diff --git >> a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/LevelTranslatorTest.java >> b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/LevelTranslatorTest.java >> > index 744e296..3ab5e92 100644 >> > --- >> a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/LevelTranslatorTest.java >> > +++ >> b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/LevelTranslatorTest.java >> > @@ -30,37 +30,40 @@ import static org.junit.Assert.*; >> > @RunWith(Parameterized.class) >> > public class LevelTranslatorTest { >> > >> > - private final java.util.logging.Level level; >> > - private final Level expectedLevel; >> > + private final java.util.logging.Level javaLevel; >> > + private final Level log4jLevel; >> > >> > - public LevelTranslatorTest(final java.util.logging.Level level, >> final Level expectedLevel) { >> > - this.level = level; >> > - this.expectedLevel = expectedLevel; >> > + public LevelTranslatorTest(final java.util.logging.Level >> javaLevel, final Level log4jLevel) { >> > + this.javaLevel = javaLevel; >> > + this.log4jLevel = log4jLevel; >> > } >> > >> > @Parameterized.Parameters >> > public static Collection<Object[]> data() { >> > return Arrays.asList( >> > new Object[][]{ >> > - {CustomJdkLevel.TEST, Level.INFO}, >> > - {CustomJdkLevel.DEFCON_2, Level.ERROR}, >> > - {CustomJdkLevel.DEFCON_1, Level.FATAL}, >> > {java.util.logging.Level.OFF, Level.OFF}, >> > {java.util.logging.Level.ALL, Level.ALL}, >> > {java.util.logging.Level.SEVERE, Level.ERROR}, >> > {java.util.logging.Level.WARNING, Level.WARN}, >> > {java.util.logging.Level.INFO, Level.INFO}, >> > - {java.util.logging.Level.CONFIG, Level.INFO}, >> > - {java.util.logging.Level.FINE, Level.DEBUG}, >> > - {java.util.logging.Level.FINER, Level.DEBUG}, >> > - {java.util.logging.Level.FINEST, Level.TRACE} >> > + {java.util.logging.Level.CONFIG, >> LevelTranslator.CONFIG}, >> > + {java.util.logging.Level.FINE, LevelTranslator.FINE}, >> > + {java.util.logging.Level.FINER, LevelTranslator.FINER}, >> > + {java.util.logging.Level.FINEST, >> LevelTranslator.FINEST} >> > } >> > ); >> > } >> > >> > @Test >> > public void testToLevel() throws Exception { >> > - final Level actualLevel = LevelTranslator.toLevel(level); >> > - assertEquals(expectedLevel, actualLevel); >> > + final Level actualLevel = LevelTranslator.toLevel(javaLevel); >> > + assertEquals(log4jLevel, actualLevel); >> > + } >> > + >> > + @Test >> > + public void testToJavaLevel() throws Exception { >> > + final java.util.logging.Level actualLevel = >> LevelTranslator.toJavaLevel(log4jLevel); >> > + assertEquals(javaLevel, actualLevel); >> > } >> > } >> > \ No newline at end of file >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > -- > Matt Sicker <[email protected]> >
