LINUX.ORG.RU

Временной интервал в логе

 


0

1

Здравствуйте.

Есть необходимость хранить лог за месяц. Но не как Logrotate, архивировать и делать новый, а хранить временной интервал в одном и том же файле.

Не знаю понятно или нет, приведу пример.

В логе записи с 15.01 по 15.02, наступает 16.02 и в логе должны остаться записи с 16.01 по 16.02, наступает 17.02 и в логе должны остаться записи с 17.01 по 17.02, т.е. месяц, плавающий период.

Возможно такое?

Спасибо.


Это нетехнологично, так как нет хорошего способа, как сдвинуть все записи в логе или отрезать начало.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

А что значит «сдвинуть все записи»? Я начало отрезаю сейчас, но там количество строк «плывет», то получается 0,75 месяца, то 1,5.

Думал что есть способ как-то поудобнее все это сделать.

xohox
() автор топика

Храни логи в базе данных, там и удалять и выборки будешь делать как захочешь

futurama ★★★★★
()

Да. Нужно просто читать логи в нужном порядке:
cat file.log.2 file.log.1 file.log > view.log

urxvt ★★★★★
()
Ответ на: комментарий от xohox

Ну вот эта команда как раз складывает во временный файл 500000 последних строк, очищает старый лог и скидывает туда записи из временного файла обратно. В теории могут быть грабли, если во время такого перекидывания софт добавит новые записи, то эти пару секунд могут или потеряться или смешаться со старыми. Если тебя такое устраивает, то вместо tail можно использовать grep и фильтровать первый месяц, но опять таки нужно считать, какой месяц первый и прочий гемор.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от goingUp

То что потеряется не важно. Обрезание происходит ночью, максимум пара строк потеряется.

Да, это работает, но месяц на месяц не угадаешь, не всегда 500000 строк это ровно месяц. Сейчас лог начинается с Jan 26 18:54:57, а мне бы с 14.03 сделать.

xohox
() автор топика
Последнее исправление: xohox (всего исправлений: 1)

Хочешь сделать sliding window поверх фс? Копай гугель в сторону ring buffer, вроде пара имплементаций есть. Но будет криво, сразу предупреждаю.

Проще кидать лог в какую capped collection в монге или что-то похожее

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)

Помоему простой скрипт: date умеет считать время назад, grep найдет и покажет тебе номер строки, tail по этому номеру отпилит скоко тебе надо.

Bootmen ☆☆☆
()
Последнее исправление: Bootmen (всего исправлений: 2)

Смотри:
Каждые сутки ты стираешь информацию за одни сутки,
и записываешь информацию за новые сутки.

Всё что тебе надо - записывать лог в файлы по суткам,
тогда будет нетрудно стереть ненужные, например по имени.

Shushundr ★★★★
()

Так и напиши нужное тебе правило для logrotate. Уж сделать «ежемесячно» там можно элементарно.

andytux ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.