[logback-dev] [JIRA] Commented: (LBCLASSIC-303) LoggingEvent.getCallerData() fails when called from a sub class
Ceki Gulcu (JIRA)
noreply-jira at qos.ch
Wed Nov 2 23:44:12 CET 2011
[ http://jira.qos.ch/browse/LBCLASSIC-303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12253#action_12253 ]
Ceki Gulcu commented on LBCLASSIC-303:
--------------------------------------
If the last argument is an exception it is treated as such. This change was introduced in SLF4J v 1.6.0. Here is the text:
In the presence of multiple parameters and if the last argument in a logging statement is an exception, then SLF4J will now presume that the user wants the last argument to be treated as an exception and not a simple parameter. See the relevant FAQ entry for further details. This fixes bug 70 submitted by Joern Huxhorn who also provided the relevant patch.
See also http://slf4j.org/faq.html#paramException
Does the above help?
> 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