From 7552796aa666c11442713cba37e7fbc339bfa020 Mon Sep 17 00:00:00 2001 From: Alexander Dorokhine Date: Fri, 12 Dec 2014 15:14:21 -0800 Subject: [PATCH] Rename the auto-named logger field trial as a logger name mismatch detector. --- .../main/java/org/slf4j/LoggerFactory.java | 24 ++++---- .../src/main/java/org/slf4j/helpers/Util.java | 2 +- ...java => DetectLoggerNameMismatchTest.java} | 60 +++++++++++-------- .../src/test/java/org/slf4j/ShapeTest.java | 23 ------- .../test/java/org/slf4j/shape/ShapeBase.java | 12 ---- .../src/test/java/org/slf4j/shape/Square.java | 7 --- 6 files changed, 47 insertions(+), 81 deletions(-) rename slf4j-simple/src/test/java/org/slf4j/{AutoNamedLoggerFieldTrialTest.java => DetectLoggerNameMismatchTest.java} (65%) delete mode 100755 slf4j-simple/src/test/java/org/slf4j/ShapeTest.java delete mode 100755 slf4j-simple/src/test/java/org/slf4j/shape/ShapeBase.java delete mode 100755 slf4j-simple/src/test/java/org/slf4j/shape/Square.java diff --git a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java index e3e4d4a3..2e2bb137 100755 --- a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java +++ b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java @@ -56,7 +56,7 @@ import org.slf4j.impl.StaticLoggerBinder; * Please note that all methods in LoggerFactory are static. * * - * @author Alexandre Dorokhine + * @author Alexander Dorokhine * @author Robert Elliot * @author Ceki Gülcü * @@ -85,11 +85,11 @@ public final class LoggerFactory { static SubstituteLoggerFactory TEMP_FACTORY = new SubstituteLoggerFactory(); static NOPLoggerFactory NOP_FALLBACK_FACTORY = new NOPLoggerFactory(); - // Support for the automatically-named logger field trial. - static final String AUTO_NAMED_LOGGER_FIELD_TRIAL_PROPERTY = - "org.slf4j.LoggerFactory.autoNamedLoggerFieldTrial"; - static boolean AUTO_NAMED_LOGGER_FIELD_TRIAL = - Boolean.getBoolean(AUTO_NAMED_LOGGER_FIELD_TRIAL_PROPERTY); + // Support for detecting mismatched logger names. + static final String DETECT_LOGGER_NAME_MISMATCH_PROPERTY = + "org.slf4j.LoggerFactory.detectLoggerNameMismatch"; + static boolean DETECT_LOGGER_NAME_MISMATCH = + Boolean.getBoolean(DETECT_LOGGER_NAME_MISMATCH_PROPERTY); /** @@ -305,15 +305,15 @@ public final class LoggerFactory { @Nonnull public static Logger getLogger(@Nonnull Class clazz) { Logger logger = getLogger(clazz.getName()); - if (AUTO_NAMED_LOGGER_FIELD_TRIAL) { + if (DETECT_LOGGER_NAME_MISMATCH) { Class autoComputedCallingClass = Util.getCallingClass(); if (nonMatchingClasses(clazz, autoComputedCallingClass)) { Util.report(String.format( - "Auto-named logger field trial: mismatch detected between " + - "given logger name and automatic logger name. Given name: \"%s\"; " + - "automatic name: \"%s\". If this is unexpected, please file a bug " + - "against slf4j. Set property %s to \"false\" to disable this check.", - logger.getName(), autoComputedCallingClass.getName(), AUTO_NAMED_LOGGER_FIELD_TRIAL_PROPERTY)); + "Detected logger name mismatch. Given name: \"%s\"; automatic name: \"%s\". " + + "See http://www.slf4j.org/codes.html#loggerNameMismatch for info. " + + "Set property %s to \"false\" to disable this check.", + logger.getName(), autoComputedCallingClass.getName(), + DETECT_LOGGER_NAME_MISMATCH_PROPERTY)); } } return logger; diff --git a/slf4j-api/src/main/java/org/slf4j/helpers/Util.java b/slf4j-api/src/main/java/org/slf4j/helpers/Util.java index 4a205c02..4fd5c508 100755 --- a/slf4j-api/src/main/java/org/slf4j/helpers/Util.java +++ b/slf4j-api/src/main/java/org/slf4j/helpers/Util.java @@ -28,7 +28,7 @@ package org.slf4j.helpers; /** * An internal utility class. * - * @author Alexandre Dorokhine + * @author Alexander Dorokhine * @author Ceki Gülcü */ public final class Util { diff --git a/slf4j-simple/src/test/java/org/slf4j/AutoNamedLoggerFieldTrialTest.java b/slf4j-simple/src/test/java/org/slf4j/DetectLoggerNameMismatchTest.java similarity index 65% rename from slf4j-simple/src/test/java/org/slf4j/AutoNamedLoggerFieldTrialTest.java rename to slf4j-simple/src/test/java/org/slf4j/DetectLoggerNameMismatchTest.java index 75ce3d07..b903592b 100755 --- a/slf4j-simple/src/test/java/org/slf4j/AutoNamedLoggerFieldTrialTest.java +++ b/slf4j-simple/src/test/java/org/slf4j/DetectLoggerNameMismatchTest.java @@ -33,20 +33,20 @@ import java.io.PrintStream; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.slf4j.shape.Square; /** - * Tests that the automatically named logger field trial works and - * doesn't cause problems or trigger if disabled. + * Tests that detecting logger name mismatches works and doesn't cause problems + * or trigger if disabled. *

* This test can't live inside slf4j-api because the NOP Logger doesn't * remember its name. * - * @author Alexandre Dorokhine + * @author Alexander Dorokhine + * @author Ceki Gülcü */ -public class AutoNamedLoggerFieldTrialTest { +public class DetectLoggerNameMismatchTest { - private static final String MISMATCH_STRING = "Auto-named logger field trial: mismatch detected"; + private static final String MISMATCH_STRING = "Detected logger name mismatch"; private final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); private final PrintStream oldErr = System.err; @@ -63,7 +63,7 @@ public class AutoNamedLoggerFieldTrialTest { } /* - * Pass in the wrong class to the Logger with the field trial disabled, and + * Pass in the wrong class to the Logger with the check disabled, and * make sure there are no errors. */ @Test @@ -75,7 +75,7 @@ public class AutoNamedLoggerFieldTrialTest { } /* - * Pass in the wrong class to the Logger with the field trial enabled, and + * Pass in the wrong class to the Logger with the check enabled, and * make sure there ARE errors. */ @Test @@ -92,24 +92,25 @@ public class AutoNamedLoggerFieldTrialTest { public void testTriggerWholeMessage() { setTrialEnabled(true); LoggerFactory.getLogger(String.class); - assertTrue(String.valueOf(byteArrayOutputStream).contains( - "Auto-named logger field trial: mismatch detected between given logger " + - "name and automatic logger name. Given name: \"java.lang.String\"; " + - "automatic name: \"org.slf4j.AutoNamedLoggerFieldTrialTest\". If this " + - "is unexpected, please file a bug against slf4j. Set property " + - "org.slf4j.LoggerFactory.autoNamedLoggerFieldTrial to \"false\" to " + - "disable this check.")); + assertTrue( + "Actual value of byteArrayOutputStream: " + String.valueOf(byteArrayOutputStream), + String.valueOf(byteArrayOutputStream).contains( + "Detected logger name mismatch. Given name: \"java.lang.String\"; " + + "automatic name: \"org.slf4j.DetectLoggerNameMismatchTest\". " + + "See http://www.slf4j.org/codes.html#loggerNameMismatch for info. " + + "Set property org.slf4j.LoggerFactory.detectLoggerNameMismatch to " + + "\"false\" to disable this check.")); } /* - * Checks that there are no errors with the trial enabled if the + * Checks that there are no errors with the check enabled if the * class matches. */ @Test public void testPassIfMatch() { setTrialEnabled(true); - Logger logger = LoggerFactory.getLogger(AutoNamedLoggerFieldTrialTest.class); - assertEquals("org.slf4j.AutoNamedLoggerFieldTrialTest", logger.getName()); + Logger logger = LoggerFactory.getLogger(DetectLoggerNameMismatchTest.class); + assertEquals("org.slf4j.DetectLoggerNameMismatchTest", logger.getName()); assertMismatchDetected(false); } @@ -118,18 +119,25 @@ public class AutoNamedLoggerFieldTrialTest { String.valueOf(byteArrayOutputStream).contains(MISMATCH_STRING)); } - @Test - public void verifyLoggerDefinedInBaseWithOverridenGetClassMethod() { - setTrialEnabled(true); - Square square = new Square(); - assertEquals("org.slf4j.shape.Square", square.logger.getName()); - assertMismatchDetected(false); + @Test + public void verifyLoggerDefinedInBaseWithOverridenGetClassMethod() { + setTrialEnabled(true); + Square square = new Square(); + assertEquals("org.slf4j.Square", square.logger.getName()); + assertMismatchDetected(false); + } - } private static void setTrialEnabled(boolean enabled) { // The system property is read into a static variable at initialization time // so we cannot just reset the system property to test this feature. // Therefore we set the variable directly. - LoggerFactory.AUTO_NAMED_LOGGER_FIELD_TRIAL = enabled; + LoggerFactory.DETECT_LOGGER_NAME_MISMATCH = enabled; } } + +// Used for testing that inheritance is ignored by the checker. +class ShapeBase { + public Logger logger = LoggerFactory.getLogger(getClass()); +} + +class Square extends ShapeBase {} diff --git a/slf4j-simple/src/test/java/org/slf4j/ShapeTest.java b/slf4j-simple/src/test/java/org/slf4j/ShapeTest.java deleted file mode 100755 index 4c30aabc..00000000 --- a/slf4j-simple/src/test/java/org/slf4j/ShapeTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.slf4j; - -import org.junit.Test; -import org.slf4j.LoggerFactory; -import org.slf4j.shape.Square; - -public class ShapeTest { - - @Test - public void verifyLoggerDefinedInBaseWithOverridenGetClassMethod() { - Square square = new Square(); - System.out.println(square.logger.getName()); - - } - - - private static void setTrialEnabled(boolean enabled) { - // The system property is read into a static variable at initialization time - // so we cannot just reset the system property to test this feature. - // Therefore we set the variable directly. - LoggerFactory.AUTO_NAMED_LOGGER_FIELD_TRIAL = enabled; - } -} diff --git a/slf4j-simple/src/test/java/org/slf4j/shape/ShapeBase.java b/slf4j-simple/src/test/java/org/slf4j/shape/ShapeBase.java deleted file mode 100755 index ee4ceed8..00000000 --- a/slf4j-simple/src/test/java/org/slf4j/shape/ShapeBase.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.slf4j.shape; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Created by ceki on 12/8/2014. - */ -public class ShapeBase { - - public Logger logger = LoggerFactory.getLogger(getClass()); -} diff --git a/slf4j-simple/src/test/java/org/slf4j/shape/Square.java b/slf4j-simple/src/test/java/org/slf4j/shape/Square.java deleted file mode 100755 index 56fcdefe..00000000 --- a/slf4j-simple/src/test/java/org/slf4j/shape/Square.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.slf4j.shape; - -/** - * Created by ceki on 12/8/2014. - */ -public class Square extends ShapeBase { -}