Источник: The ‘logger’ Command: Linux System Administration Guide
Gabriel Ramuglia · 14 декабря 2023
Испытываете трудности с использованием команды ‘logger’ в Linux? Вы не одиноки. Многие системные администраторы и разработчики находят её немного пугающей, но так быть не должно. Представьте себе команду ‘logger’ как курьера в Linux, доставляющего ваши системные сообщения в syslog. Это мощный инструмент, который помогает отслеживать системные события и диагностировать проблемы.
Это руководство проведёт вас от основ до продвинутого использования команды logger в Linux. Мы изучим её базовую функциональность, разберём расширенные возможности и даже обсудим типичные проблемы и их решения.
Итак, давайте погрузимся и начнём осваивать команду ‘logger’ в Linux!
Команда
loggerв Linux — это мощный инструмент для добавления записей в системный журнал. Это важная команда для системных администраторов и разработчиков, позволяющая отслеживать системные события и диагностировать проблемы. Она используется с синтаксисомlogger [аргументы] [сообщение или команда для логирования].
Вот простой пример:
logger 'Hello, this is a test message'
# Output:
# In /var/log/syslog or /var/log/messages, you'll find:
# user.notice: Hello, this is a test messageВ этом примере мы используем команду logger для отправки сообщения в системный журнал. Сообщение ‘Hello, this is a test message’ записывается с уровнем приоритета ‘notice’ в рамках средства (facility) ‘user’.
Это лишь базовый способ использования команды logger в Linux, но есть ещё много чего, что можно узнать о её расширенных возможностях и потенциальных проблемах. Читайте дальше для более подробной информации и сценариев продвинутого использования.
Команда logger в Linux — это простой, но мощный инструмент для добавления записей в системный журнал. Это важная команда для системных администраторов и разработчиков, которым нужно отслеживать системные события или диагностировать проблемы.
Начнём с простого примера использования команды logger:
logger -p local0.info 'This is a basic logger message'
# Output:
# In /var/log/syslog or /var/log/messages, you'll find:
# local0.info: This is a basic logger messageВ этом примере мы используем опцию -p с командой logger, чтобы указать приоритет сообщения. Приоритет задаётся парой facility.level. В нашем случае local0 — это средство (facility), а info — уровень. Сообщение ‘This is a basic logger message’ затем записывается с уровнем приоритета ‘info’ в рамках средства ‘local0’.
Это базовое использование команды logger довольно простое, но при этом очень мощное. Записывая сообщения с разными средствами и уровнями, вы можете категоризировать и приоритизировать свои сообщения журнала, что облегчает фильтрацию и анализ системных логов.
Однако есть некоторые потенциальные проблемы, о которых следует знать. Если у вас нет необходимых прав для записи в системный журнал или если системный журнал настроен некорректно, команда logger может работать не так, как ожидается. Мы обсудим эти проблемы и их решения в разделе по устранению неполадок в этом руководстве.
Когда вы освоитесь с базовой командой logger, можно начать изучать её более продвинутые возможности. К ним относятся использование разных опций и флагов, которые могут менять поведение команды logger. Давайте разберём эти продвинутые сценарии.
Прежде чем погружаться, познакомимся с некоторыми аргументами командной строки, или флагами, которые могут менять поведение команды logger. Вот таблица с некоторыми из наиболее часто используемых аргументов logger:
| Аргумент | Описание | Пример |
|---|---|---|
-p |
Задаёт приоритет. | logger -p local0.notice 'Test message' |
-t |
Добавляет к сообщению тег. | logger -t mytag 'Test message' |
-i |
Записывает ID процесса с каждым сообщением. | logger -i 'Test message' |
-s |
Пишет сообщение в стандартный поток ошибок в дополнение к системному журналу. | logger -s 'Test message' |
-f |
Записывает содержимое файла. | logger -f /path/to/file |
-u |
Пишет в socket вместо системного журнала. | logger -u /dev/log 'Test message' |
-n |
Отправляет сообщения на удалённый syslog-сервер. | logger -n 192.168.1.1 'Test message' |
-d |
Использует датаграммы вместо потока для удалённого логирования. | logger -d -n 192.168.1.1 'Test message' |
-P |
Задаёт порт для удалённого логирования. | logger -P 514 -n 192.168.1.1 'Test message' |
-w |
Ждёт подтверждения от удалённого сервера. | logger -w -n 192.168.1.1 'Test message' |
Теперь, когда у нас есть базовое понимание аргументов командной строки logger, давайте глубже разберём продвинутое использование logger.
Одно из распространённых продвинутых применений команды logger — логирование вывода других команд. Например, можно использовать команду logger для записи вывода команды df, которая показывает использование дискового пространства в файловых системах:
df | logger -t diskusage
# Output:
# In /var/log/syslog or /var/log/messages, you'll find something like:
# diskusage: Filesystem 1K-blocks Used Available Use% Mounted on
# diskusage: udev 4016308 0 4016308 0% /dev
# diskusage: tmpfs 807876 8796 799080 2% /run
# ...В этом примере мы передаём по конвейеру вывод команды df в команду logger. Опция -t добавляет тег ‘diskusage’ к каждому сообщению журнала. Это позволяет нам легко фильтровать сообщения журнала, относящиеся к использованию диска.
Другое продвинутое применение команды logger — логирование содержимого файла. Например, можно использовать команду logger для записи содержимого файла журнала, сгенерированного пользовательским скриптом:
logger -t myscript -f /path/to/myscript.log
# Output:
# In /var/log/syslog or /var/log/messages, you'll find the contents of myscript.log, each line tagged with 'myscript'.В этом примере опция -f говорит команде logger записать содержимое указанного файла. И снова опция -t добавляет тег к каждому сообщению журнала, позволяя нам фильтровать сообщения журнала, относящиеся к ‘myscript’.
Это лишь несколько примеров продвинутого использования команды logger в Linux. Используя разные опции и флаги, вы можете настроить поведение команды logger под свои нужды.
Хотя команда logger — это мощный инструмент для добавления записей в системный журнал, это не единственный способ. Существуют альтернативные методы, например использование функции syslog в программе на C. Давайте рассмотрим этот альтернативный подход.
Функция syslog предоставляет способ отправки сообщений в syslog, во многом подобно команде logger. Однако она используется внутри программы на C, что делает её более интегрированным решением, когда вы пишете приложение на C, которому нужна функциональность логирования.
Вот простой пример программы на C, использующей функцию syslog:
#include <syslog.h>
int main() {
openlog("myprogram", LOG_PID|LOG_CONS, LOG_USER);
syslog(LOG_INFO, "Hello, this is a test message from myprogram");
closelog();
return 0;
}# Output:
# In /var/log/syslog or /var/log/messages, you'll find:
# myprogram[12345]: Hello, this is a test message from myprogram
В этом примере мы сначала вызываем функцию openlog, чтобы задать параметры для будущих вызовов syslog. Первый аргумент — строка, которая будет добавляться в начало каждого сообщения (в данном случае ‘myprogram’). Второй аргумент — набор флагов: здесь LOG_PID (записывать ID процесса с каждым сообщением) и LOG_CONS (писать в системную консоль, если при отправке в системный журнал произошла ошибка). Третий аргумент — средство (facility), в данном случае LOG_USER.
Затем мы вызываем функцию syslog, чтобы отправить сообщение в syslog. Первый аргумент — уровень приоритета (в данном случае LOG_INFO), а второй — само сообщение.
Наконец, мы вызываем функцию closelog, чтобы закрыть соединение с syslog.
Плюс этого подхода в том, что он более интегрирован с вашей программой на C, но есть и несколько минусов. Он сложнее, чем использование команды logger, и может использоваться только из программы на C. Кроме того, вам придётся вручную управлять соединением с syslog (открытие, закрытие, обработка ошибок и т.д.).
Выбирая между командой logger и функцией syslog, учитывайте потребности вашего приложения. Если вы пишете shell-скрипт или вам нужен быстрый и простой способ записывать сообщения, команда logger, скорее всего, лучший выбор. Но если вы пишете программу на C и вам нужен больший контроль над процессом логирования, функция syslog может подойти лучше.
У каждого инструмента есть свои причуды, и команда logger в Linux не исключение. Несмотря на простоту, при её использовании вы можете столкнуться с некоторыми препятствиями. Здесь мы разберём некоторые типичные проблемы, с которыми вы можете столкнуться, их решения, а также советы по лучшим практикам и оптимизации.
Одна из типичных проблем при использовании команды logger — ошибка ‘Permission denied’. Обычно это происходит, когда у вас нет необходимых прав для записи в системный журнал.
Вот пример такой ошибки:
logger 'Test message'
# Output:
# logger: socket /dev/log: Permission deniedВ этом примере мы попытались использовать команду logger для отправки сообщения в системный журнал, но получили ошибку ‘Permission denied’, потому что у нас не было необходимых прав.
Решение — запустить команду logger с sudo:
sudo logger 'Test message'
# Output:
# In /var/log/syslog or /var/log/messages, you'll find:
# user.notice: Test messageВ этом примере мы использовали sudo для запуска команды logger с правами root, что позволило нам записать в системный журнал.
Другая типичная проблема — сообщение не удаётся найти в системном журнале. Это может произойти, если ваш системный журнал настроен игнорировать сообщения определённого уровня приоритета или средства.
Вот пример этой проблемы:
logger -p local7.debug 'Test message'
# Output:
# No output in /var/log/syslog or /var/log/messagesВ этом примере мы использовали команду logger для отправки ‘Test message’ с уровнем приоритета ‘debug’ в рамках средства ‘local7’. Однако сообщение не удалось найти в системном журнале.
Решение — проверить файл конфигурации syslog (обычно он находится в /etc/syslog.conf или /etc/rsyslog.conf) и убедиться, что он не игнорирует сообщения уровня ‘debug’ или средства ‘local7’.
Вот несколько советов по эффективному использованию команды logger:
- Используйте осмысленные теги с опцией
-t, чтобы категоризировать свои сообщения журнала. - Используйте подходящий уровень приоритета для ваших сообщений. Не используйте ‘debug’ для важных сообщений, которые вы всегда хотите видеть в системном журнале, и не используйте ‘emerg’ для тривиальных сообщений, не являющихся критичными.
- Если вы пишете shell-скрипт, подумайте о том, чтобы записывать начало и конец скрипта, а также любые важные события или ошибки, возникающие во время его выполнения. Это поможет вам диагностировать проблемы со скриптом.
- Если вы логируете вывод других команд, рассмотрите использование опции
-s, чтобы писать сообщения и в стандартный поток ошибок, и в системный журнал. Это поможет вам сразу замечать ошибки или важные события, не проверяя системный журнал.
Прежде чем углубляться в команду logger, важно понять системный журнал Linux и его значимость.
Системный журнал Linux — это механизм, который собирает и хранит сообщения от ядра, системных утилит и системных приложений. Это настоящая сокровищница информации о работе системы, включая сообщения об ошибках, диагностическую информацию и системные события.
Вот базовый пример того, что вы можете найти в системном журнале Linux:
tail /var/log/syslog
# Output:
# Jan 1 12:00:01 myhost CRON[12345]: (root) CMD (command)
# Jan 1 12:00:01 myhost systemd[1]: Started Session 123 of user myuser.
# Jan 1 12:00:02 myhost kernel: [123456.789012] CPU0: Core temperature above threshold, cpu clock throttled
# ...В этом примере мы используем команду tail для отображения последних строк файла /var/log/syslog — одного из файлов, где хранятся сообщения системного журнала. Мы видим сообщения от демона CRON (фонового сервиса, выполняющего запланированные задачи), процесса systemd (менеджера системы и сервисов) и самого ядра.
Эти сообщения могут дать ценное представление о работе системы и помочь в диагностике и устранении неполадок. Они также могут служить доказательством инцидентов безопасности, таких как попытки несанкционированного доступа или вредоносная активность.
Команда logger в Linux — это инструмент, который позволяет добавлять собственные сообщения в системный журнал. Это может быть полезно для отслеживания системных событий, отладки скриптов или приложений, а также для записи вывода других команд.
Хотя команда logger — главный герой этого руководства, она не единственный инструмент для работы с системным журналом. К связанным командам относятся syslog, которая может настраивать и управлять демоном syslog, и logrotate, которая может ротировать, сжимать и отправлять по почте системные журналы. Понимание этих связанных команд и того, как они взаимодействуют с командой logger, даст вам более широкое представление о системном логировании в Linux.
Команда logger в Linux, несмотря на простоту, может быть мощным инструментом при использовании в больших скриптах или проектах. Её способность записывать системные сообщения и выводы команд делает её бесценным инструментом для отслеживания и отладки сложных систем.
В скриптах команда logger часто служит средством отслеживания выполнения скрипта. Записывая начало, конец и важные события в скрипте, вы можете легко следить за его прогрессом и диагностировать любые возникающие проблемы.
Вот пример bash-скрипта, использующего команду logger:
#!/bin/bash
logger -t myscript 'Script started'
# ... your script here ...
logger -t myscript 'Script ended'
# Output:
# In /var/log/syslog or /var/log/messages, you'll find:
# myscript: Script started
# myscript: Script endedВ этом примере команда logger используется для записи начала и конца скрипта. Опция -t добавляет тег ‘myscript’ к каждому сообщению журнала, позволяя легко фильтровать сообщения журнала, относящиеся к этому скрипту.
Хотя команда logger мощна сама по себе, её часто используют в связке с другими командами. Например, команда tail -f может использоваться для отслеживания системного журнала в реальном времени, позволяя вам наблюдать сообщения logger по мере их записи. Команда grep может использоваться для фильтрации системного журнала по конкретным сообщениям logger.
Если вы хотите узнать больше о команде logger и системном логировании в Linux, вот несколько ресурсов с более подробной информацией:
-
The Syslog Protocol (RFC 5424): официальная спецификация протокола syslog, лежащего в основе системного журнала в Linux.
-
The Art of Command Line: обширное руководство по командной строке в Linux, включая раздел о системном логировании.
-
Linux Logging Basics: руководство по основам логирования в Linux, включая команду logger и связанные команды.
В этом всеобъемлющем руководстве мы изучили команду logger в Linux — универсальный инструмент, позволяющий добавлять собственные сообщения в системный журнал. Это мощный инструмент для отслеживания системных событий, отладки скриптов или приложений и записи вывода других команд.
Наш путь начался с основ команды logger: понимания её синтаксиса и того, как использовать её для добавления простых сообщений в системный журнал. Затем мы перешли к более продвинутым возможностям, показав, как использовать разные опции и флаги для изменения поведения команды logger. Мы также обсудили альтернативный подход к логированию сообщений в Linux — использование функции syslog в программе на C.
По пути мы разобрали типичные проблемы, с которыми вы можете столкнуться при использовании команды logger, предложив решения и обходные пути для каждой из них. И мы сравнили команду logger с функцией syslog, дав вам представление о более широком ландшафте инструментов для логирования сообщений в Linux.
Вот краткое сравнение рассмотренных методов:
| Метод | Интеграция | Сложность | Сценерий использования |
|---|---|---|---|
| Команда logger | Shell-скрипты и командная строка | От низкой до умеренной | Быстрое и простое логирование |
| Функция syslog | Программы на C | Высокая | Интегрированное логирование в программах на C |
Начинаете ли вы работу с командой logger или хотите поднять свои навыки Linux на новый уровень, мы надеемся, что это руководство дало вам более глубокое понимание команды logger и её возможностей.
Благодаря сочетанию простоты и мощности команда logger — ценный инструмент для любого пользователя Linux. Исследуйте, учитесь и счастливого логирования!