Вопрос неоднозначный. Лучше тестируйте и то и другое.
Вот вы знаете, что если достаточно крупными блоками и достаточно много параллельных скриптов будут писать в файл, то сообщения могут перемешаться?
тут возникает необходимость синхронизировать доступ к файлу, а значит возникает узкое место, где все параллельные процессы блокируются.
Тогда как в CУБД уже есть некоторые интересные и бесплатно доступные механизмы типа INSERT IGNORE, которые возвращают результат «мгновенно».
Prepared statements и пул соединений тоже будут не лишними.
Еще есть мнение, что по-настоящему нагруженному проекту логи действий пользователей вообще не нужны. Разве что во время отладки.