Вы правы, что обеспокоены тем, что не сможете записать все потоки в один и тот же файл без проблем с производительностью.
Когда у меня возникла эта проблема (запись собственной регистрации, задолго до Log4j), я создал два буфера фиксированного размера в памяти, и все потоки производителя записывали в один буфер, в то время как выделенный потребительский поток считывал из другого буфера и записывал в файл. Таким образом, потокам записи приходилось синхронизироваться только при получении и увеличении индекса в буфере и при замене буферов, и он блокировался только при заполнении текущего буфера. Было много памяти, но быстро.
Что касается других идей, вы можете проверить, как работают такие регистраторы, как Log4j и Logback, им пришлось бы решить эту проблему.