'logger' отправляет данные в сокет Unix /dev/журнал
. (Это сокет, несмотря на то, что он находится в /dev.)
В большинстве дистрибутивов Linux этот сокет нет больше не принадлежит традиционному демону syslog — его другой конец на самом деле не идет напрямую к rsyslog. Скорее всего, сокет /dev/log принадлежит systemd-журнал служба, которая все еще работает и получает сообщения.
# fuser -v /dev/журнал
КОМАНДА ДОСТУПА ПИД-ИД ПОЛЬЗОВАТЕЛЯ
/run/systemd/journal/dev-log: root 1 F.... systemd
корень 304 F.... systemd-журнал
(Обратите внимание, что init также содержит сокет — если journald остановлен, но в сокете есть какая-то активность, init автоматически снова запустит службу… во многом так же, как inetd в прошлом делал для служб TCP.)
Systemd-journald хранит журналы в /var/log/journal, которые вы можете прочитать с помощью журналctl -f
вместо обычного 'tail -f' (они в индексированном двоичном формате). Обычно сообщения через /dev/log продолжают записываться туда, даже если rsyslogd не работает.
$ регистратор привет
$ журналctl -n 1
12 июля 18:12:26 ember root[951422]: Привет
В таких системах пакеты rsyslogd и syslog-ng получают только переданный сообщения из systemd-journald, а не напрямую из программ.Они работают либо путем прослушивания другого сокета (внутри /run/systemd), на который journald пересылает все сообщения, либо путем прямого чтения двоичных файлов журнала из /var/log/journal.
(Обычно предпочтительнее прямой доступ к файлу .journal, поскольку он позволяет rsyslogd собирать дополнительные поля, включенные программами, которые в противном случае были бы потеряны при использовании пересылки сообщений на основе сокетов.)
Если вы укажете «logger» на сокет Unix, который не принимает сообщения, он фактически покажет сообщение об ошибке, как и должно:
$ python -c "из импорта сокета *; socket(AF_UNIX, SOCK_DGRAM).bind('/tmp/log')"
$ logger -u /tmp/log Здравствуйте!
регистратор: сокет /tmp/log: соединение отклонено