Я написал простую программу datelog для разделения общих журналов на основе зарегистрированной даты, в отличие от текущего системного времени, когда программа просматривает строку журнала. Это может или не может быть именно тем, что cronolog или другой сплиттер журналов уже делают, но быстрее написать свой, чем узнать, что делают другие.
Используя год и месяц в зарегистрированном запросе, строка затем записывается в файл или канал, который включает в себя YYYYMM, вычисленный из зарегистрированных данных. Да, это несколько специфично для общего формата журнала. Первая [предполагается, что она разделяет дату. Остерегайтесь IPv6-адресов. :)
Для анализа журнала важно, чтобы каждый журнал действительно содержал только запросы на каждый соответствующий месяц, и каждый журнал в идеале должен быть полным для правильных результатов анализа. Недостаточно определить имя файла на основе текущего времени в разделителе журнала, потому что медленный запрос, начинающийся в 23:59:59, в итоге окажется в файле журнала за неправильный месяц.
Я использую это с nginx посредством именованного fifo, которое проверяется на существование до запуска nginx. Обратите внимание, что в программе есть компромисс между обнаружением ошибок и буферизованным выводом, где datelog в настоящее время предпочитает буферизованный вывод из соображений производительности, поэтому, пожалуйста, убедитесь, что ваша установка действительно работает, особенно при использовании оболочек, чтобы не потерять какие-либо данные журнала ,
Исходный код: http://stuge.se/datelog.c
Пожалуйста, не стесняйтесь присылать мне любые отзывы и, конечно же, патчи!