When using "%C" or "%M", log4J uses Throwable.getStackTrace to get the stackTrace and use this information to get the caller class and method.
The problem is that when using an AsyncAppender, the Throwable is created in another thread and the stackTrace does not contain the caller method.