TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #108 7.94K
Как демоны выполняют логгирование?

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

Так вот, в качестве альтернативы сообщения можно записывать в отдельный журнальный файл программы. Основной недостаток такого подхода заключается в сложности менеджмента этих файлов. Для решения проблемы была разработана система syslog.

Что такое syslog?

Система syslog предоставляет единый централизованный механизм, который позволяет любому приложению записывать свои сообщения в единый журнал. Система syslog состоит из двух основных компонентов: демона syslogd и библиотечной функции syslog().

Демон syslogd, принимает сообщения из двух разных источников: сокета UNIX-домена (/dev/log), который хранит сообщения, сгенерированные локально, и сокета интернет-домена, который хранит сообщения, отправленные по TCP/IP.

Для записи сообщений в журнал любой процесс может воспользоваться библиотечной функцией syslog(). На основе переданных ей аргументов она создает сообщение и помещает его в сокет "/dev/log", где оно будет доступно для syslogd.

Файл /etc/syslog.conf

Конфигурационный файл "/etc/syslog.conf" определяет поведение демона syslogd и то, как и куда должны записываться системные сообщения. Он состоит из набора правил, которые имеют следующий вид:


источник.приоритет действие

# Записывать все сообщения от ядра в файл kern.log
kern.* /var/log/kern.log


Программный интерфейс syslog

Программный интерфейс syslog состоит из трех основных функций, которые входят в пространство "syslog.h":

1. Функция openlog() устанавливает настройки, которые по умолчанию применяются ко всем последующим вызовам syslog():


void openlog(const char *ident, int log_options, int facility);

openlog("slog", LOG_PID|LOG_CONS, LOG_DAEMON);


2. Функция syslog() записывает сообщения в журнал:


void syslog(int priority, const char *format, ...);

syslog(LOG_INFO, "Hello world ... ");


‰3. Функция closelog() вызывается после окончания записи сообщений, чтобы разорвать соединение с журналом:


void closelog(void);


Если не прорабатывать конфиги и не указывать альтернативные пути вывода сообщений для различных источников, то последовательное выполнение функций выше приведет к появлению лога в файле "/var/log/syslog":


xodefenderpc slog[754521]: Hello world ...


Linux++ | IT-Образование
  • 👍 26
  • 🔥 8
  • ❤ 5
  • 🤔 3
  • 👎 1
  • 😈 1
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →