Pull to refresh

log4php или что-то другое?

Reading time1 min
Views1.6K
Вот столкнулся с тем что нужно из многих потоков приложения нужно писать в логи в один и тот же файл (нет в базу не подходит)

Рассмотрев варианты с flock — понял что время на то чтобы другой поток получил лок для записи в файл довольно таки велико — отказался.

Нашел проект log4php — это порт на пхп от проекта log4j


Дофиксили его — убрали баги всякие — поставили на продакшн. И оказалось что при большой нагрузке (около 7-10к запорсов в секунды) log4php не выполняет своей многопоточной записи в файл (то пропускает логи, то пишет их в перемешку из разных потоков). Мало того log4php при наполнении файла до лимита начинает делать аналогично logrotate (файл с логом переименовывается в log.txt.1 и лог обнуляется текущий.) — который тоже сбоит — он сносит старые файлы — обнуляет их за счет чтого, что в момент переименования (когда log.txt уже изменил имя) другие потоки пишут в log.txt а он потом опять переименовывается в log.txt.1 и log.txt.1 грубо говоря сносится — а там нужные логи :)

посему вопрос — что можно использовать для многопоточное ведения логов — быстрое и обязательно многопоточное.
Tags:
Hubs:
Total votes 1: ↑1 and ↓0+1
Comments20

Articles