
The problem with asynchronous SocketAppenders is that you have essentially three options: a) you keep events in an in memory-back-buffer. This will lead to out-of-memory situations if more events are produced than transfered. At this point your app will either explode or drop events. Both is not really an option. b) you keep the events in a disk-based buffer.This will lead to out-of-disk-space situations if more events are produced than transfered. See a) ;)
So event transmission must be synchronous.
You can also use a bounded blocking queue. In this way the process is usually asynchronous but falls back to (nearly) synchronous it there are too many events and slows down the system. But I think the througput will be higher even in the latter case.