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]>
>

Reply via email to