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]

Reply via email to