You have a good point. I'll remove the extraneous levels later tonight.
On 10 September 2014 18:00, Remko Popma <[email protected]> wrote: > 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]> >> > > -- Matt Sicker <[email protected]>
