Есть данные, которые вы должны видеть в реальном времени, и данные, которые необходимо записать для автономной обработки. У них разные требования.
данные в реальном времени должны быть в машиночитаемом формате и обычно направлены в места, где они используются. Центральный регистратор может быть на этом пути, если он не задерживает информацию в реальном времени недопустимо. Для этого я бы использовал сокеты (или JMS), а не буферизованный файл.
Журналы автономной обработки могут быть в машиночитаемом формате (для ночных отчетов) или для чтения человеком (для отладки). Для этого я бы использовал файл или базу данных или и то, и другое. Файл может быть проще в управлении, особенно если он большой. База данных облегчает построение отчетов.
В любом случае я бы передавал информацию, которую необходимо отправить через сокет или записал в файл, в другой поток, чтобы любые случайные задержки в системе не влияли на код, который создает журнал. На самом деле, я бы подумал отложить отправку любых журналов до тех пор, пока критический процесс не будет завершен. Т.е. сначала вы обрабатываете все, что нужно сделать, а затем регистрируете все интересующее вас.