Как я могу просмотреть файлы журнала в Linux и применить пользовательские фильтры при просмотре?

Я должен прочитать некоторые гигантские файлы журнала в системе Linux. Существует большая помеха в журналах. В данный момент я делаю что-то вроде этого:

cat logfile.txt | grep -v "IgnoreThis\|IgnoreThat" | less

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

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

Существует ли инструмент, который может сделать это для меня? Я не могу установить новое программное обеспечение так, надо надеяться, это - что-то, что было бы уже установлено - например, меньше, vi, что-то в Python или lib Perl, и т.д.

Изменение кода, который генерирует журнал для генерации меньшего, не является опцией.

42
задан gareth_bowles 31 January 2014 в 19:17
поделиться

3 ответа

Попробуйте инструмент multitail - он позволяет вам не только просматривать сразу несколько журналов, но и применять регулярное выражение. фильтрует в интерактивном режиме.

4
ответ дан 26 November 2019 в 23:26
поделиться

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

В нынешнем виде для сравнения трех значений требуется (по крайней мере) две операции.

-121--2907159-

Просто просмотрите последовательность, создав int как обычно, но игнорируйте нечисловые символы:

int res = 0;
for (int i=0; i < str.length(); i++) {
    char c = s.charAt(i);
    if (c < '0' || c > '9') continue;
    res = res * 10 + (c - '0');
}
-121--1397851-

см. справочную страницу . Есть некоторые варианты, которые можно использовать, например, для поиска слов. Он также имеет режим редактирования строк.

0
ответ дан 26 November 2019 в 23:26
поделиться

Основываясь на ответе ghostdog74 и less manpage, я придумал следующее:

~/.bashrc:

export LESSOPEN='|~/less-filter.sh %s'
export LESS=-R  # to allow ANSI colors

~/less-filter.sh:

#!/bin/sh
case "$1" in
*logfile*.log*) ~/less-filter.sed < $1
  ;;
esac

~/less-filter.sed:

/deleteLinesLikeThis/d  # to filter out lines
s/this/that/  # to change text on lines (useful to colorize using ANSI escapes)

Затем:

  • less logfileFooBar.log.1 -- применяет фильтр автоматически.
  • cat logfileFooBar.log.1 | less -- чтобы увидеть журнал без фильтрации

Пока этого достаточно, но я бы хотел иметь возможность редактировать фильтры на лету.

4
ответ дан 26 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: