Отправка сообщений в syslog из оболочки






Syslog — это протокол и приложение, призванные организовать централизованный приём сообщений от приложений для помещения их в лог-файлы, обычно располагающиеся в каталоге /var/log. В Ubuntu на сегодняшний день по умолчанию используется продвинутый демон syslog, называемый rsyslogd. В некоторых других дистрибутивах может использоваться sysklogd, но в рамках сегодняшней заметки это значения не имеет. Приложения обычно используют функции системных библиотек, чтобы отправить сообщение в syslog. А как быть, если вам нужно отправить сообщение из сценария оболочки? Здесь нам на помощь приходит logger — утилита-интерфейс к syslog.


Отправить сообщение в общесистемный лог-файл /var/log/messages очень просто. Достаточно вызвать logger без ключей и передать ей сообщение:

$ logger 'Hello world!'

Теперь можно взглянуть на на содержимое /var/log/messages:

$ tail -n 1 /var/log/messages
Jan 19 21:17:50 localhost ashep: Hello world

Если необходимо, чтобы сообщение было продублировано в поток стандартного вывода ошибок, используйте опцию -s:

$ logger -s 'Hello world!'

Используя опцию -i, вы заставите logger отправить в syslog по мимо сообщения ещё и ID процесса, отправившего сообщение:

$ logger -i "Hello world"; tail -n 1 /var/log/messages
Jan 19 21:24:36 localhost ashep[19362]: Hello world

Также можно помечать сообщения определённым тэгом (по умолчанию им является имя пользователя, который отправляет сообщение):

$ logger -t "MY_TAG" "Hello world";  tail -n 1 /var/log/messages
Jan 19 21:27:45 localhost MY_TAG: Hello world

Кроме того, каждое сообщение, отправляемое в syslog, имеет так называемый приоритет. Приоритет состоит из двух частей: facility и level.

Facility может принимать значения:

  • auth
  • authpriv
  • cron
  • daemon
  • ftp
  • kern
  • lpr
  • mail
  • news
  • syslog
  • user
  • uucp
  • local0 — local7

Level может быть:

  • alert
  • crit
  • debug
  • emerg
  • err
  • info
  • notice
  • warning

По умолчанию при отправке сообщения с помощью logger приоритет определяется как user.notice. Если же вы хотите использовать иной приоритет, можете воспользоваться опцией -p. Например:

$ logger -p local3.info "Hello world"

Если вы хотите отправить сообщение в отличный от /var/log/messages файл, воспользуйтесь опцией -f:

$ logger -f /var/log/myapp.log "Hello world"

Интересующимся традиционно рекомендуется к прочтению: