[ 
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

        
_______________________________________________
logback-dev mailing list
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-dev

Reply via email to