Your diagnosis is exactly right. AsyncApppender.preprocess calls LoggingEvent.prepareForDeferredProcessing which calls getThreadName and causes the thread name to be set correctly in the logging event - all in the thread that does the logging. SocketAppender however doesn't call prepareForDeferredProcessing. One option is to wrap your SocketAppender in an AsyncAppender. |