You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2008/05/19 19:14:38 UTC
svn commit: r657869 - in /logging/log4j/trunk: src/changes/changes.xml
src/main/java/org/apache/log4j/spi/LocationInfo.java
tests/src/java/org/apache/log4j/spi/LocationInfoTest.java
Author: carnold
Date: Mon May 19 10:14:38 2008
New Revision: 657869
URL: http://svn.apache.org/viewvc?rev=657869&view=rev
Log:
Bug 44888: LocationInfo can report wrong caller when other class names contain logger class as substring
Modified:
logging/log4j/trunk/src/changes/changes.xml
logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java
logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LocationInfoTest.java
Modified: logging/log4j/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=657869&r1=657868&r2=657869&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Mon May 19 10:14:38 2008
@@ -38,6 +38,7 @@
<action action="add" issue="43874">SocketHubAppender should expose actual port in use to extending classes.</action>
<action action="add" issue="44551">SocketHubAppender in the 1.2.16 does not support a scroll back buffer or application property</action>
<action action="add" issue="41156">Give log4j threads reasonable names/<action>
+ <action action="fix" issue="44888">LocationInfo can report wrong caller when other class names contain logger class name as substring.</action>
</release>
<release version="1.2.15" date="2007-08-24" description="SyslogAppender enhancements, NTEventLogAppender and Maven build.">
Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java?rev=657869&r1=657868&r2=657869&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java Mon May 19 10:14:38 2008
@@ -128,6 +128,21 @@
if(ibegin == -1)
return;
+ //
+ // if the next character after the class name exists
+ // but is not a period, see if the classname is
+ // followed by a period earlier in the trace.
+ // Minimizes mistakeningly matching on a class whose
+ // name is a substring of the desired class.
+ // See bug 44888.
+ if (ibegin + fqnOfCallingClass.length() < s.length() &&
+ s.charAt(ibegin + fqnOfCallingClass.length()) != '.') {
+ int i = s.lastIndexOf(fqnOfCallingClass + ".");
+ if (i != -1) {
+ ibegin = i;
+ }
+ }
+
ibegin = s.indexOf(Layout.LINE_SEP, ibegin);
if(ibegin == -1)
Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LocationInfoTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LocationInfoTest.java?rev=657869&r1=657868&r2=657869&view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LocationInfoTest.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LocationInfoTest.java Mon May 19 10:14:38 2008
@@ -42,4 +42,44 @@
li.fullInfo);
}
+
+ /**
+ * Class with name that is a substring of its caller.
+ */
+ private static class NameSubstring {
+ /**
+ * Construct a LocationInfo. Location should be immediate caller of this method.
+ * @return location info.
+ */
+ public static LocationInfo getInfo() {
+ return new LocationInfo(new Throwable(), NameSubstring.class.getName());
+
+ }
+ }
+
+ /**
+ * Class whose name is contains the name of the class that obtains the LocationInfo.
+ */
+ private static class NameSubstringCaller {
+ /**
+ * Construct a locationInfo. Location should be this location.
+ * @return location info.
+ */
+ public static LocationInfo getInfo() {
+ return NameSubstring.getInfo();
+ }
+
+ }
+
+ /**
+ * Tests creation of location info when the logger class name
+ * is a substring of one of the other classes in the stack trace.
+ * See bug 44888.
+ */
+ public void testLocationInfo() {
+ LocationInfo li = NameSubstringCaller.getInfo();
+ assertEquals(NameSubstringCaller.class.getName(), li.getClassName());
+ assertEquals("getInfo", li.getMethodName());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org