Как транслировать файлы журналов контента, который постоянно меняет имена файлов в perl? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть ряд приложений в системах Linux, которые мне нужно постоянно «вытекать» или даже «вытаскивать», но проблема в том, что имена файлов постоянно меняются и меняются.

Все они закодированы (даты в разных форматах), и каждый из них имеет разные приращенные форматы.

Большинство из них начинаются с одного и увеличиваются, но у одного нет расширения изатем добавляет расширение после первого файла, а другой увеличивает число, но один раз нажимая 99, поворачивается, чтобы увеличить альфа, и возвращает цифру к 01, а затем снова увеличивается, когда он катится так быстро.

У меня просто ОСсценарии на уровне оболочки, утилиты командной строки ОС и perl, доступные мне для обработки этой ситуации, чтобы другое приложение могло взять и прочитать эти журналы.

Новые файлы всегда создаются в тот момент, когда начинается запись в новый файл, а группы разных журналов (некоторые читают, некоторые нет) записываются в один и тот же каталог, поэтому я не могу просто забрать что-либо, ударивкаталог.

Если я просто 'tail -n 1000000 -f |'сегодня они работают нормально для приложения чтения, которое я использую, пока файл не изменится, и я не могу настроить диапазоны списков файлов в приложении чтения, но могу предварительно обработать их, чтобы они в основном отображались как непрерывный поток для читателя по сравнению с читателем напрямуювызывая команды, чтобы прочитать их. простой читатель журнала Perl, подобный этому , также отлично работает для статических имен файлов, но не для динамических.Очень важно, чтобы я не перерабатывал какие-либо строки журналов, а просто записывал новые строки, записываемые в журналы.

Я признаю, что я не являюсь какой-либо формой Perl-гуру, и у меня есть лучшие ответы / подсказкиДо сих пор удалось обнаружить, что функция Glob в Perl, возможно, делает это, но примеры, которые я обнаружил, в основном перерабатывают все файлы при каждом запуске, а затем, кажется, останавливаются.

Примеры имен файлов, с которыми я имею дело в нескольких приложениях, которые я пытаюсь обработать ..

  • appA _YYMMDD.log
  • appA _YYMMDD_0001.log
  • appA _YYMMDD_0002.log
  • WS01 APPB _YYMMDD.log
  • WS02 APPB _YYMMDD.log
  • WS03 AppB _YYMMDD.log
  • APPC MMDD_A01.log
  • APPC MMDD_B01.log
  • ГГГГММДД_001_ APPD .log

Как указано выше, файлы не имеют одинаковый индекс и просто отслеживают каталог на предмет измененийневозможно, так как там много чего написано.В системе dev более 50 журналов записываются в каталог и тысячи файлов, и я только пытаюсь получить 5. Я смотрю, можно ли сделать доступным несколько сетей, чтобы попробовать это предложение, но в настоящее время он недоступен и не устанавливает какие-либодополнительные RPM в среде - это, как правило, многомесячная битва.

ls -i 24792 APPA_180901.log 24805 APPA__180902.log 17011 APPA__180903.log 17072 APPA__180904.log 24644 APPA__180905.log 17081 APPA__180906.log 17115 APPA__62 * 1062)на самом деле корень того, что я пытаюсь сделать, - это просто непрерывный поток, независимо от того, изменяется ли имя файла, и ему не нужно многократно выполнять команду извлечения или иметь большие разрывы в потоке данных, в то время как некоторые сценарии выясняют, что файл, в который выполняется вход, имеетизменилось.Мне не нужно анализировать содержимое (это делает мое другое приложение). Существует ли простой способ обработки этого изменяемого имени файла?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Попробуйте хвостовой переключатель .Я создал этот скрипт для привязки файлов журналов, которые меняются ежедневно и имеют имена YYYY-MM-DD.Чтобы использовать этот сценарий, вы просто говорите:

% tailswitch '*.log'

Кавычка не позволяет оболочке интерпретировать шаблон glob.Скрипт будет время от времени выполнять шаблон глобуса для переключения на более новый файл в зависимости от его имени.

0 голосов
/ 28 ноября 2018

Как насчет мониторинга каталога журналов на предмет изменений с помощью inotify Linux, например, Linux::inotify2?Затем вы можете определить, когда создаются новые файлы журнала, прекратить чтение из старого файла журнала и начать чтение из нового файла журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...