Какая best practice защиты от записи в файл в несколько потоков?
Не всегда поставленную задачу надо выполнять в лоб. Иногда надо подумать, а зачем писать в несколько файлов. Например, у nginx сотни потоков одновременно могут писать ОДИН access_log, никаких проблем с этим не возникает. 
- Либо один поток-логгер, получающий данные из очереди
- Либо разные потоки,  все пишут (append) текст в один файл в неблокирующем режиме
Посмотрите как сделано в yii
https://github.com/yiisoft/yii2/blob/master/framew...