I have done some investigation. SocketAppender is working separate thread. It calls getCallerData() method, which basically throws exception and tries to get caller information from a stack trace. In theory it should work, but SocketAppender is working in the another thread, so the stack trace is useless.

Here is creating new Throwable:

LoggingEvent.java
  public StackTraceElement[] getCallerData() {
    if (callerDataArray == null) {
      callerDataArray = CallerData.extract(new Throwable(), fqnOfLoggerClass,
              loggerContext.getMaxCallerDataDepth(), loggerContext.getFrameworkPackages());
    }
    return callerDataArray;
  }

Caller data iterate through StackTraceElements:
CallerData.java
```java

/**

  • Extract caller data information as an array based on a Throwable passed as
  • parameter
    */
    public static StackTraceElement[] extract(Throwable t,
    String fqnOfInvokingClass, final int maxDepth,
    List<String> frameworkPackageList) {
    if (t == null) { return null; }

StackTraceElement[] steArray = t.getStackTrace();
StackTraceElement[] callerDataArray;

int found = LINE_NA;
for (int i = 0; i < steArray.length; i++) {
if (isInFrameworkSpace(steArray[i].getClassName(),
fqnOfInvokingClass, frameworkPackageList))

{ // the caller is assumed to be the next stack frame, hence the +1. found = i + 1; }

else {
if (found != LINE_NA)

{ break; }

}
}

// we failed to extract caller data
if (found == LINE_NA)

{ return EMPTY_CALLER_DATA_ARRAY; }

int availableDepth = steArray.length - found;
int desiredDepth = maxDepth < (availableDepth) ? maxDepth : availableDepth;

callerDataArray = new StackTraceElement[desiredDepth];
for (int i = 0; i < desiredDepth; i++)

{ callerDataArray[i] = steArray[found + i]; }

return callerDataArray;
}

static boolean isInFrameworkSpace(String currentClass,
String fqnOfInvokingClass, List<String> frameworkPackageList) {
// the check for org.apache.log4j.Category class is intended to support
// log4j-over-slf4j. it solves http://bugzilla.slf4j.org/show_bug.cgi?id=66
if (currentClass.equals(fqnOfInvokingClass) || currentClass.equals(LOG4J_CATEGORY)

currentClass.startsWith(SLF4J_BOUNDARY) isInFrameworkSpaceList(currentClass, frameworkPackageList)) { return true; }

else

{ return false; }

}
```

If you check in debug what are the StackTraceElements:

```
ch.qos.logback.classic.spi.CallerData#extract
steArray =

{java.lang.StackTraceElement[12]@1686}


0 =

{java.lang.StackTraceElement@1687}

"ch.qos.logback.classic.spi.LoggingEvent.getCallerData(LoggingEvent.java:262)"
1 =

{java.lang.StackTraceElement@1688}

"ch.qos.logback.classic.net.SocketAppender.postProcessEvent(SocketAppender.java:48)"
2 =

{java.lang.StackTraceElement@1689}

"ch.qos.logback.classic.net.SocketAppender.postProcessEvent(SocketAppender.java:34)"
3 =

{java.lang.StackTraceElement@1690}

"ch.qos.logback.core.net.AbstractSocketAppender.dispatchEvents(AbstractSocketAppender.java:230)"
4 =

{java.lang.StackTraceElement@1691}

"ch.qos.logback.core.net.AbstractSocketAppender.connectSocketAndDispatchEvents(AbstractSocketAppender.java:194)"
5 =

{java.lang.StackTraceElement@1692}

"ch.qos.logback.core.net.AbstractSocketAppender.access$000(AbstractSocketAppender.java:44)"
6 =

{java.lang.StackTraceElement@1693}

"ch.qos.logback.core.net.AbstractSocketAppender$1.run(AbstractSocketAppender.java:153)"
7 =

{java.lang.StackTraceElement@1694}

"java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)"
8 =

{java.lang.StackTraceElement@1695}

"java.util.concurrent.FutureTask.run(FutureTask.java:266)"
9 =

{java.lang.StackTraceElement@1696}

"java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)"
10 =

{java.lang.StackTraceElement@1697}

"java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)"
11 =

{java.lang.StackTraceElement@1698}

"java.lang.Thread.run(Thread.java:745)"
```

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira