[logback-dev] [JIRA] Commented: (LBCLASSIC-303) LoggingEvent.getCallerData() fails when called from a sub class

Greg Thomas (JIRA) noreply-jira at qos.ch
Wed Nov 2 23:04:12 CET 2011


    [ http://jira.qos.ch/browse/LBCLASSIC-303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12252#action_12252 ] 

Greg Thomas commented on LBCLASSIC-303:
---------------------------------------

Hmm, interestingly the tests appear to test something that isn't supported. Unless I've missed something, you can't log an exception with an array of arguments. 

i.e. there's no 

final public void debug(String format, Object[] argArray, Throwable t);

set of methods. So, if you call, for example, 

logger.debug(msg, args, new Exception("test Ex") );

you end up in 

final public void debug(String format, Object arg1, Object arg2);

which means that contents of args is lost. 

So,
a) Should the (String format, Object[] argArray, Throwable t) set of signatures exists?, or
b) Should I remove the argArray with Exception test from the DBAppender test suite?, or
c) What have I missed?

Thanks for your patience!

> LoggingEvent.getCallerData() fails when called from a sub class
> ---------------------------------------------------------------
>
>                 Key: LBCLASSIC-303
>                 URL: http://jira.qos.ch/browse/LBCLASSIC-303
>             Project: logback-classic
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>            Reporter: Greg Thomas
>            Assignee: Logback dev list
>
> This is probably best demonstrated with a code example;
> package com.example;
> import ch.qos.logback.classic.Level;
> import ch.qos.logback.classic.Logger;
> import ch.qos.logback.classic.LoggerContext;
> import ch.qos.logback.classic.spi.LoggingEvent;
> public class Test {
> 	Logger logger;
> 	public static void main(String[] args) {
> 		Test test = new Test();
> 		test.go();
> 	}
> 	private void go() {
> 		SuperClass anotherClass = new SuperClass();
> 		anotherClass.go();
> 		anotherClass = new SubClass();
> 		anotherClass.go();
> 	}
> 	private class SuperClass {
> 		public void go() {
> 			LoggerContext lc = new LoggerContext();
> 			lc.setName("default");
> 			// ... a logger
> 			logger = lc.getLogger("root");
> 			LoggingEvent le = new LoggingEvent(this.getClass().getName(),
> 					logger, Level.DEBUG, "Test logging event", new Exception(
> 							"test Ex"), new String[] { "something" });
> 			StackTraceElement[] callerData = le.getCallerData();
> 			System.out.println("LoggingEvent in " + this.getClass().getName() + " has "
> 					+ callerData.length + " stack trace elements:");
> 			for (StackTraceElement stackTraceElement : callerData) {
> 				System.out.println("Element=" + stackTraceElement);
> 			}
> 		}
> 	}
> 	private class SubClass extends SuperClass {
> 	}
> }
> The output of this is as follows;
> LoggingEvent in com.example.Test$SuperClass has 2 stack trace elements:
> Element=com.example.Test.go(Test.java:20)
> Element=com.example.Test.main(Test.java:14)
> LoggingEvent in com.example.Test$SubClass has 0 stack trace elements:
> This is despite exactly the same go() method being called; it's not being modified in the subclass. Note that although the example uses inner classes, the same behaviour is exhibited in regular classes too.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the logback-dev mailing list