Попытка раскрасить логи была сделана сначала просто забавы ради, но потом, когда я понял, насколько это удобно, уже не мог работать с однообразными одноцветными логами.
Изначально логи раскрашивались с помощью расширения для logback, но потом оказалось, что удобней писать логи обычным текстом, а раскрашивать - уже при просмотре.
Для раскрашивания понадобятся следующие команды:
| tail | |
| -n 100 | вывести последние 100 строк файла |
| -f | команда не завершит свою работу сразу,а будет написано ещё что-то и отображать новые строки в процессе их добавления |
| log.txt | имя файла лога |
| sed | "поточный" текстовый редактор, получает на вход текст, обрабатывает его согласно указанным правилам, и передает дальше (дальше ничего нет, поэтому выводит на экран) |
| -е "s/что_заменять/на_что/" | правило (регулярное выражение), согласно которому будет обработан текст |
| log.txt |
- Если строка содержит слово INFO, она делается зеленой.
- Если строка содержит слово WARN - желтой.
- Если строка содержит слово ERROR - красной.
Символ с кодом 1B и открывающая квадратная скобка [ - управляющие символы, говорящие об изменении цвета. Цифры - цвет. После этого маленькая буква m. Цвета:
- Красный - 31
- Зеленый - 32
- Желтый - 33
- Сброс цвета - 0
echo -e "THIS IS \x1b[31mRED\x1b[0m OR \x1b[32mGREEN\x1b[0m TEXT"(ключ -e нужен чтобы команда обработала слеши для спец. символов), то будет выведено:
THIS IS RED OR GREEN TEXT
В результате получился вот такой скрипт:
#!/bin/bash tail -n 100 -f log.txt | sed -e 's/^.*ERROR.*$/\x1b[31m&\x1b[0m/' -e 's/^.*INFO.*$/\x1b[32m&\x1b[0m/' -e 's/^.*WARN.*$/\x1b[33m&\x1b[0m/'Он выводит лог в реальном времени, раскрашивая сообщения со словом ERROR - в красный, WARN - в желтый, INFO - в коричневый цвета.
Недавно наткнулся на специализированную утилиту для раскраски логов, но заставить её работать нормально на нашем сервере не получилось. Утилита называется ccze, официальный сайт - http://freshmeat.net/projects/ccze/

Комментариев нет:
Отправить комментарий