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