Eric, By "clientNumber" I take that you are referring to one of your specific keys that you have inserted into the MDC? So, the bug is that if I use the %X pattern without a specified key, log4j "blows up"? But, %X{<your key here>} works just fine?
Can you please enter a bug for the behavior you are seeing, with as much detail as you can provide (examples, code, stack traces, etc)? You can find the bug database at http://nagoya.apache.org/bugzilla/ thanks, -Mark > -----Original Message----- > From: E Thors [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, July 03, 2002 9:28 AM > To: [EMAIL PROTECTED] > Subject: bug with MDC with patch > > > I believe I have done my due diligence on this one. > There seems to be a problem with MDC, when you specify > the pattern %X without a clientNumber. The problem is > that the current code does not handle it gracefully. > It throws an exception and blows up the application. > Could not find anything in bug tracking. Tried to > check cvs, but currently seems to be down. I realize > that you should specify the clientNumber. An error in > the log4j properites file should not kill the > application. Below I have included a small program and > log4j.properties file. > > I am wondering if someone could explain the pros and > cons of NDC and MDC. I have gone through the archives > of log4j-user. It seems like the general feeling was > that MDC is better. I want to be able to track a > user's session through the web site. So when I hit the > jsp page, I would call MDC.put or NDC.push the session > id. Anything called from the jsp page could be trace > by the session id. My initial unscientific experience > with NDC was that at times the stack seemed to retain > items. > > On a related note concerning the usage of the pattern > %X{clientNumber}for MDC seems like it would be nice if > %X without a clientNumber would print out the entire > Hashtable. This would allow the person debugging an > application that did not have access to the > documentation or source code an easy way to find out > what all of the current context were at that point. > They then could possibly refine the pattern they would > use. > > I have gone on too long now. Hopefully someone will > read it. > > Thanks, > > eric > > > OS: Win2000 > Java:1.3.1 > Log4j: 1.2.4 > > ---- TestError.java---------- > public class TestError { > static Logger log = Logger.getLogger("foo"); > > public static void main (String[] args) { > PropertyConfigurator.configure(args[0]); > > System.out.println("start"); > MDC.put("test", "foo"); > log.warn("Warn me"); > log.error("Warn me"); > System.out.println("done"); > > } > } > ------------------- > ------ log4j.properties -------------- > log4j.rootCategory=warn, A2, RR, dest2 > > # A2 is set to be a LF5Appender > log4j.appender.A2=org.apache.log4j.lf5.LF5Appender > log4j.appender.A2.layout=org.apache.log4j.PatternLayout > log4j.appender.A2.layout.ConversionPattern=[slf5s.start]%d{DAT > E}[slf5s.DATE]%n\ > > %p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n\ > > %c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n > > log4j.appender.dest2.ImmediateFlush=true > log4j.appender.dest2.layout=org.apache.log4j.PatternLayout > log4j.appender.dest2.layout.ConversionPattern=%-4r > [%t] %-5p %c (%X) - %m ~%l%n > > ! WRITE LOG TO A FILE, ROLL THE FILE AFTER SOME SIZE > log4j.appender.dest2=org.apache.log4j.DailyRollingFileAppender > ! This appender will only log messages with priority > equal to or higher than > ! the one specified here > log4j.appender.dest2.Threshold=WARN > ! Specify the file name (${property_key} gets > substituted with its value) > log4j.appender.dest2.File=log4j.log > > # RR is the RollingFileAppender that outputs to a > rolling log > # file called sample.log. > > log4j.appender.RR=org.apache.log4j.RollingFileAppender > log4j.appender.RR.File=sample.log > > log4j.appender.RR.layout=org.apache.log4j.PatternLayout > log4j.appender.RR.layout.ConversionPattern=[slf5s.start]%d{DAT > E}[slf5s.DATE]%n\ > > %p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n\ > > %c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n > > # Set the max size of the file > log4j.appender.RR.MaxFileSize=500KB > ------------------------ > > -------Error ---------------- > > java TestError log4j.properties > start > java.lang.NullPointerException > at java.util.Hashtable.get(Hashtable.java:320) > at org.apache.log4j.MDC.get0(MDC.java:121) > at org.apache.log4j.MDC.get(MDC.java:75) > at > org.apache.log4j.spi.LoggingEvent.getMDC(LoggingEvent.java:228) > at > org.apache.log4j.helpers.PatternParser$MDCPatternConverter.con > vert(PatternParser.java:455) > at > org.apache.log4j.helpers.PatternConverter.format(PatternConver > ter.java:56) > at > org.apache.log4j.PatternLayout.format(PatternLayout.java:495) > at > org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:292) > at > org.apache.log4j.RollingFileAppender.subAppend(RollingFileAppe > nder.java:225) > at > org.apache.log4j.WriterAppender.append(WriterAppender.java:150) > at > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221) > at > org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAp > penders(AppenderAttachableImpl.java:57) > at > org.apache.log4j.Category.callAppenders(Category.java:190) > at > org.apache.log4j.Category.forcedLog(Category.java:375) > at > org.apache.log4j.Category.warn(Category.java:1024) > at TestError.main(TestError.java:11) > > If it were to exit gracefully, you should see "done". > > ----- Patch ------------- > --- MDC.java 2002-07-03 12:09:01.000000000 -0400 > +++ c:/MDC.java 2002-07-03 08:40:54.000000000 -0400 > @@ -117,7 +117,7 @@ > return null; > } else { > Hashtable ht = (Hashtable) > ((ThreadLocalMap)tlm).get(); > - if(ht != null) { > + if(ht != null && key != null) { > return ht.get(key); > } else { > return null; > > > > __________________________________________________ > Do You Yahoo!? > Sign up for SBC Yahoo! Dial - First Month Free > http://sbc.yahoo.com > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>