The branch, master has been updated
       via  c1945db449459277f2bdd97d9bfb97253cefb4a4 (commit)
      from  f7121aba34e0faef82ca46ea8e2d7b0dfc9bd593 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=c1945db449459277f2bdd97d9bfb97253cefb4a4
http://github.com/ceki/logback/commit/c1945db449459277f2bdd97d9bfb97253cefb4a4

commit c1945db449459277f2bdd97d9bfb97253cefb4a4
Author: Ceki Gulcu <[email protected]>
Date:   Mon Nov 30 23:16:43 2009 +0100

    - Fixed http://jira.qos.ch/browse/LBCLASSIC-102 and added relevant test 
cases

diff --git a/logback-classic/pom.xml b/logback-classic/pom.xml
index 286d0e6..cbb6bea 100644
--- a/logback-classic/pom.xml
+++ b/logback-classic/pom.xml
@@ -215,8 +215,11 @@
                  of java code. -->
 
             <Import-Package>
-              sun.reflect;resolution:=optional, javax.*;resolution:=optional,
-              ch.qos.logback.core.rolling, ch.qos.logback.core.rolling.helper,
+              sun.reflect;resolution:=optional, 
+              javax.*;resolution:=optional,
+              org.xml.*;resolution:=optional,
+              ch.qos.logback.core.rolling, 
+              ch.qos.logback.core.rolling.helper,
               *
             </Import-Package>
 
diff --git 
a/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java 
b/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
index 03038b5..b2a9fe5 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
@@ -14,7 +14,6 @@
 package ch.qos.logback.classic;
 
 public class ClassicConstants {
-  static public final char LOGGER_SEPARATOR = '.';
   static public final String USER_MDC_KEY = "user";
 
   public static final String LOGBACK_CONTEXT_SELECTOR = 
"logback.ContextSelector";
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java 
b/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java
index cc3cd17..50d6de9 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java
@@ -28,6 +28,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.classic.spi.LoggerRemoteView;
 import ch.qos.logback.classic.spi.LoggingEvent;
 import ch.qos.logback.core.Appender;
+import ch.qos.logback.core.CoreConstants;
 import ch.qos.logback.core.spi.AppenderAttachable;
 import ch.qos.logback.core.spi.AppenderAttachableImpl;
 import ch.qos.logback.core.spi.FilterReply;
@@ -287,12 +288,33 @@ public final class Logger implements org.slf4j.Logger, 
LocationAwareLogger,
     return aai.detachAppender(appender);
   }
 
+  static int getSeparatorIndexOf(String name) {
+    return getSeparatorIndexOf(name, 0);
+  }
+  
+  /**
+   * Get the position of the separator character, if any, starting at position
+   * 'fromIndex'.
+   * 
+   * @param name
+   * @param fromIndex
+   * @return
+   */
+  static int getSeparatorIndexOf(String name, int  fromIndex) {
+    int i = name.indexOf(CoreConstants.DOT, fromIndex);
+    if(i != -1) {
+      return i;
+    } else {
+      return name.indexOf(CoreConstants.DOLLAR, fromIndex);
+    }
+  }
+  
   /**
    * Create a child of this logger by suffix, that is, the part of the name
    * extending this logger. For example, if this logger is named "x.y" and the
    * lastPart is "z", then the created child logger will be named "x.y.z".
    * 
-   * <p> IMPORTANT: Calls to this method must be within a syncronized block on
+   * <p> IMPORTANT: Calls to this method must be within a synchronized block on
    * this logger.
    * 
    * @param lastPart
@@ -302,11 +324,11 @@ public final class Logger implements org.slf4j.Logger, 
LocationAwareLogger,
    * @return
    */
   Logger createChildByLastNamePart(final String lastPart) {
-    int i_index = lastPart.indexOf(ClassicConstants.LOGGER_SEPARATOR);
+    int i_index = getSeparatorIndexOf(lastPart);
     if (i_index != -1) {
       throw new IllegalArgumentException("Child name [" + lastPart
           + " passed as parameter, may not include ["
-          + ClassicConstants.LOGGER_SEPARATOR + "]");
+          + CoreConstants.DOT + "]");
     }
 
     if (childrenList == null) {
@@ -317,7 +339,7 @@ public final class Logger implements org.slf4j.Logger, 
LocationAwareLogger,
       childLogger = new Logger(lastPart, this, this.loggerContext);
     } else {
       childLogger = new Logger(
-          name + ClassicConstants.LOGGER_SEPARATOR + lastPart, this,
+          name + CoreConstants.DOT + lastPart, this,
           this.loggerContext);
     }
     childrenList.add(childLogger);
@@ -353,7 +375,7 @@ public final class Logger implements org.slf4j.Logger, 
LocationAwareLogger,
   static private final int DEFAULT_CHILD_ARRAY_SIZE = 5;
 
   Logger createChildByName(final String childName) {
-    int i_index = childName.indexOf(ClassicConstants.LOGGER_SEPARATOR, 
this.name
+    int i_index = getSeparatorIndexOf(childName, this.name
         .length() + 1);
     if (i_index != -1) {
       throw new IllegalArgumentException("For logger [" + this.name
diff --git 
a/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java 
b/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java
index 0c4663a..1fdbaeb 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java
@@ -134,7 +134,7 @@ public class LoggerContext extends ContextBase implements 
ILoggerFactory,
     // in between as well (if they don't already exist)
     String childName;
     while (true) {
-      int h = name.indexOf(ClassicConstants.LOGGER_SEPARATOR, i);
+      int h = Logger.getSeparatorIndexOf(name, i);
       if (h == -1) {
         childName = name;
       } else {
diff --git 
a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ClassNameOnlyAbbreviator.java
 
b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ClassNameOnlyAbbreviator.java
index eed7c7e..7f761e2 100644
--- 
a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ClassNameOnlyAbbreviator.java
+++ 
b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ClassNameOnlyAbbreviator.java
@@ -24,6 +24,9 @@ import ch.qos.logback.core.CoreConstants;
 public class ClassNameOnlyAbbreviator implements Abbreviator {
 
   public String abbreviate(String fqClassName) {
+    // we ignore the fact that the separator character can also be a dollar
+    // If the inner class is org.good.AClass#Inner, returning
+    // AClass#Inner seems most appropriate
     int lastIndex = fqClassName.lastIndexOf(CoreConstants.DOT);
     if (lastIndex != -1) {
       return fqClassName.substring(lastIndex + 1, fqClassName.length());
diff --git 
a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator.java
 
b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator.java
index eac2e65..f4aac29 100644
--- 
a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator.java
+++ 
b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator.java
@@ -21,7 +21,7 @@ public class TargetLengthBasedClassNameAbbreviator implements 
Abbreviator {
   final int targetLength;
 
   public TargetLengthBasedClassNameAbbreviator(int targetLength) {
-    this.targetLength = targetLength;   
+    this.targetLength = targetLength;
   }
 
   public String abbreviate(String fqClassName) {
@@ -36,9 +36,9 @@ public class TargetLengthBasedClassNameAbbreviator implements 
Abbreviator {
     }
 
     int[] dotIndexesArray = new int[ClassicConstants.MAX_DOTS];
-    // a.b.c contains 2 dots but 2+1 parts. 
+    // a.b.c contains 2 dots but 2+1 parts.
     // see also http://jira.qos.ch/browse/LBCLASSIC-110
-    int[] lengthArray = new int[ClassicConstants.MAX_DOTS+1];
+    int[] lengthArray = new int[ClassicConstants.MAX_DOTS + 1];
 
     int dotCount = computeDotIndexes(fqClassName, dotIndexesArray);
 
@@ -55,8 +55,8 @@ public class TargetLengthBasedClassNameAbbreviator implements 
Abbreviator {
       if (i == 0) {
         buf.append(fqClassName.substring(0, lengthArray[i] - 1));
       } else {
-        buf.append(fqClassName.substring(dotIndexesArray[i - 1], 
dotIndexesArray[i - 1]
-            + lengthArray[i]));
+        buf.append(fqClassName.substring(dotIndexesArray[i - 1],
+            dotIndexesArray[i - 1] + lengthArray[i]));
       }
       // System.out.println("i=" + i + ", buf=" + buf);
     }
@@ -64,11 +64,12 @@ public class TargetLengthBasedClassNameAbbreviator 
implements Abbreviator {
     return buf.toString();
   }
 
-
   static int computeDotIndexes(final String className, int[] dotArray) {
     int dotCount = 0;
     int k = 0;
     while (true) {
+      // ignore the $ separator in our computations. This is both convenient
+      // and sensible.
       k = className.indexOf(CoreConstants.DOT, k);
       if (k != -1 && dotCount < ClassicConstants.MAX_DOTS) {
         dotArray[dotCount] = k;
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java 
b/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java
index c490af3..b1add24 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java
@@ -24,6 +24,7 @@ import ch.qos.logback.classic.ClassicConstants;
 import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.Appender;
+import ch.qos.logback.core.CoreConstants;
 
 
 public class HLogger extends MarkerIgnoringBase {
@@ -237,10 +238,10 @@ public class HLogger extends MarkerIgnoringBase {
    * @return
    */
   HLogger createChildByLastNamePart(final String lastPart) {
-    int i_index = lastPart.indexOf(ClassicConstants.LOGGER_SEPARATOR);
+    int i_index = lastPart.indexOf(CoreConstants.DOT);
     if (i_index != -1) {
       throw new IllegalArgumentException("Child name [" + lastPart
-          + " passed as parameter, may not include [" + 
ClassicConstants.LOGGER_SEPARATOR
+          + " passed as parameter, may not include [" + CoreConstants.DOT
           + "]");
     }
 
@@ -251,7 +252,7 @@ public class HLogger extends MarkerIgnoringBase {
     if (this.isRootLogger()) {
       childHLogger = new HLogger(lastPart, this);
     } else {
-      childHLogger = new HLogger(name + ClassicConstants.LOGGER_SEPARATOR + 
lastPart,
+      childHLogger = new HLogger(name + CoreConstants.DOT + lastPart,
           this);
     }
     childrenMap.put(lastPart, childHLogger);
diff --git 
a/logback-classic/src/test/java/ch/qos/logback/classic/LoggerTest.java 
b/logback-classic/src/test/java/ch/qos/logback/classic/LoggerTest.java
index 5507ff9..f6350f9 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/LoggerTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/LoggerTest.java
@@ -134,9 +134,30 @@ public class LoggerTest {
       assertFalse(logger.isTraceEnabled());
       assertFalse(logger.isEnabledFor(Level.TRACE));
     }
+  }
+
+  @Test
+  public void  innerClass_I() {
+    root.setLevel(Level.DEBUG);
+    Logger a = lc.getLogger("a");
+    a.setLevel(Level.INFO);
+    Logger a_b = lc.getLogger("a$b");
+    assertEquals(Level.INFO, a_b.getEffectiveLevel());
+  }
 
+  @Test
+  public void  innerClass_II() {
+    root.setLevel(Level.DEBUG);
+    Logger a = lc.getLogger(this.getClass());
+    a.setLevel(Level.INFO);
+    Logger a_b = lc.getLogger(new Inner().getClass());
+    assertEquals(Level.INFO, a_b.getEffectiveLevel());
   }
 
+  
+  class Inner {
+  }
+  
   @Test
   public void testEnabled_All() throws Exception {
     root.setLevel(Level.ALL);
diff --git 
a/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLoggerContext.java
 
b/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLoggerContext.java
index 571cdb2..651af43 100644
--- 
a/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLoggerContext.java
+++ 
b/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLoggerContext.java
@@ -18,6 +18,7 @@ import java.util.Map;
 
 import ch.qos.logback.classic.ClassicConstants;
 import ch.qos.logback.classic.Level;
+import ch.qos.logback.core.CoreConstants;
 
 /**
  * This logger context quite optimized for logger retrieval.
@@ -80,7 +81,7 @@ public class ControlLoggerContext {
 
       int i = 0;
       while (true) {
-        i = name.indexOf(ClassicConstants.LOGGER_SEPARATOR, i);
+        i = name.indexOf(CoreConstants.DOT, i);
         if (i == -1) {
           // System.out.println("FINAL-Creating logger named [" + name + "] 
with
           // parent " + parent.getName());
diff --git 
a/logback-classic/src/test/java/ch/qos/logback/classic/control/ScenarioMaker.java
 
b/logback-classic/src/test/java/ch/qos/logback/classic/control/ScenarioMaker.java
index cf2c734..ead333b 100644
--- 
a/logback-classic/src/test/java/ch/qos/logback/classic/control/ScenarioMaker.java
+++ 
b/logback-classic/src/test/java/ch/qos/logback/classic/control/ScenarioMaker.java
@@ -17,6 +17,7 @@ import java.util.LinkedList;
 
 import ch.qos.logback.classic.ClassicConstants;
 import ch.qos.logback.classic.Level;
+import ch.qos.logback.core.CoreConstants;
 
 public class ScenarioMaker {
 
@@ -76,7 +77,7 @@ public class ScenarioMaker {
             childName = ScenarioRandomUtil.randomId();
             count += childName.length();
           } else {
-            childName = loggerName + ClassicConstants.LOGGER_SEPARATOR
+            childName = loggerName + CoreConstants.DOT
                 + ScenarioRandomUtil.randomId();
             count += childName.length();
           }
diff --git a/logback-core/pom.xml b/logback-core/pom.xml
index 873db19..270ed8d 100644
--- a/logback-core/pom.xml
+++ b/logback-core/pom.xml
@@ -137,6 +137,7 @@
             <Export-Package>ch.qos.logback.core.*</Export-Package>
             <Import-Package>
               javax.*;resolution:=optional, 
+              org.xml.*;resolution:=optional,
               org.codehaus.janino;resolution:=optional,
               *
             </Import-Package>
diff --git a/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java 
b/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java
index 5258d1b..520c5f4 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java
@@ -91,9 +91,12 @@ public class CoreConstants {
    * Ceki's machine (Orion)
    */
   public static long REFERENCE_BIPS = 9000;
+  
+  
+  
   static public final char DOT = '.';
-
   static public final char TAB = '\t';
+  static public final char DOLLAR = '$';
   
   static public final String SEE_FNP_NOT_SET = "See also 
http://logback.qos.ch/codes.html#tbr_fnp_not_set";;
   
diff --git a/logback-site/src/site/pages/news.html 
b/logback-site/src/site/pages/news.html
index 9d0d4a2..68eb6b0 100644
--- a/logback-site/src/site/pages/news.html
+++ b/logback-site/src/site/pages/news.html
@@ -71,6 +71,12 @@
     event instead of its own context name.
     </p>
 
+    <p>When a logger is named after an inner class, the '$' is used as
+    a separator, instead of the usual '.'. This fixes the level
+    inheritence issue described in <a
+    href="http://jira.qos.ch/browse/LBCLASSIC-102";>LBCLASSIC-102</a>
+    and as reported by Joern Huxhorn.</p>
+
     <hr width="80%" align="center" />
 
     <h3>9th of August 2009 - Release of version 0.9.17</h3>

-----------------------------------------------------------------------

Summary of changes:
 logback-classic/pom.xml                            |    7 +++-
 .../ch/qos/logback/classic/ClassicConstants.java   |    1 -
 .../main/java/ch/qos/logback/classic/Logger.java   |   32 ++++++++++++++++---
 .../java/ch/qos/logback/classic/LoggerContext.java |    2 +-
 .../classic/pattern/ClassNameOnlyAbbreviator.java  |    3 ++
 .../TargetLengthBasedClassNameAbbreviator.java     |   13 ++++----
 .../test/java/ch/qos/logback/classic/HLogger.java  |    7 ++--
 .../java/ch/qos/logback/classic/LoggerTest.java    |   21 +++++++++++++
 .../classic/control/ControlLoggerContext.java      |    3 +-
 .../qos/logback/classic/control/ScenarioMaker.java |    3 +-
 logback-core/pom.xml                               |    1 +
 .../java/ch/qos/logback/core/CoreConstants.java    |    5 ++-
 logback-site/src/site/pages/news.html              |    6 ++++
 13 files changed, 83 insertions(+), 21 deletions(-)


hooks/post-receive
-- 
Logback: the generic, reliable, fast and flexible logging framework.
_______________________________________________
logback-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-dev

Reply via email to