Короткая заметка о мониторинге логов в реальном времени и вызову файлов по маске.
В некоторых ситуациях приходится достаточно часто обращаться к логам каких-то модулей. Из x-ray это не всегда бывает удобно, лучше из командной строки, тем более команда tail с ключом -f позволяет выводить лог в реальном времени. Вот так и мне во время отладки системы Noolite пришлось поковыряться в логах одноименного модуля, лог файл которого создается каждые сутки новый и в имени которого присутствует текущая дата. Вызов такого файла с выводом в консоль в реальном времени будет выглядеть так:
1 |
tail -f /var/www/cms/debmes/2019-04-22_noolite.log |
При чем, если запустить в виде tail -F, то при наступлении следующих суток, по идее должен подхватиться следующий файл.
Но мы сутками мониторить не собираемся и чтобы каждый раз не вписывать точную дату в команду вывода лог файла, можно делать вызов по маске таймштампа:
1 |
tail -f /var/www/cms/debmes/$(date "+%Y-%m-%d")_noolite.log |
Чтобы выводить в реальном времени определённые строки логов, например, для отслеживания работы датчика движения, привязанного к определённому каналу можно использовать grep, получится (где 44 это номер канала):
1 |
tail -f /var/www/cms/debmes/$(date "+%Y-%m-%d")_noolite.log | grep "cell=44" |
если добавить в конце строки «> имя_файла.txt» , то выборка лога будет выводиться вместо консоли в текстовый файл:
1 |
tail -f /var/www/cms/debmes/$(date "+%Y-%m-%d")_noolite.log | grep "cell=44" > file_name.txt |
«>>» вместо «>» позволяет дописывать в конец файла, не затирая его.
Если в конце строки добавить «&», то это освободит консоль, а выполнение задачи уйдет в фон, выведя в консоль id процесса. Завершить задачу можно через kill.
Кроме tail существуют и другие более продвинутые утилиты, например, lnav позволяет мониторить сразу несколько логов, подсвечивает вывод и имеет множество других возможностей.
Чтобы не запоминать пути к логам и синтаксис маски таймштампа, можно единожды всё это заскриптить и вызывать простой командой без указания пути. Для этого создадим файл noolog в директории /usr/local/bin
1 |
sudo nano /usr/local/bin/noolog |
вписываем в него 2 строки:
1 2 |
#!/bin/bash tail -f /var/www/cms/debmes/$(date "+%Y-%m-%d")_noolite.log |
Сохраняем файл:
1 |
ctrl+X; Y |
делаем файл исполняемым:
1 |
sudo chmod +x /usr/local/bin/noolog |
Всё! Теперь в любой момент набираем в консоли «noolog» и мониторим актуальный лог модуля noolite.