понедельник, 15 февраля 2010 г.

Цветное логирование

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

Изначально логи раскрашивались с помощью расширения для logback, но потом оказалось, что удобней писать логи обычным текстом, а раскрашивать - уже при просмотре.



Для раскрашивания понадобятся следующие команды:
tail
-n 100вывести последние 100 строк файла
-fкоманда не завершит свою работу сразу,а будет написано ещё что-то и отображать новые строки в процессе их добавления
log.txtимя файла лога
sed"поточный" текстовый редактор, получает на вход текст, обрабатывает его согласно указанным правилам, и передает дальше (дальше ничего нет, поэтому выводит на экран)
-е "s/что_заменять/на_что/"правило (регулярное выражение), согласно которому будет обработан текст
log.txt
Правила будут такие:
  1. Если строка содержит слово INFO, она делается зеленой.
  2. Если строка содержит слово WARN - желтой.
  3. Если строка содержит слово ERROR - красной.
Чтобы в терминале unix написать что-то определенным цветом необходимо вывести некоторые управляющие символы:
Символ с кодом 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/

Комментариев нет:

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