View in Telegram
Как демоны выполняют логгирование? При написании демона одной из проблем является вывод сообщений об ошибках. Поскольку его выполнение происходит в фоновом режиме, он не может просто выводить информацию в терминал, как это делают другие программы (для того, чтобы освежить в памяти понимание демонов, отсылаю вас на ранний пост). Так вот, в качестве альтернативы сообщения можно записывать в отдельный журнальный файл программы. Основной недостаток такого подхода заключается в сложности менеджмента этих файлов. Для решения проблемы была разработана система 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-Образование
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily