FYI, Log4J Appenders are only ever accessed by one thread at a time. Hence, This implementation is very complex despite the fact that no synchronization is needed.