13.3. Функция syslog

13.3. Функция syslog

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

#include <syslog.h>

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

Хотя эта функция изначально разрабатывалась для BSD, в настоящее время она предоставляется большинством производителей систем Unix. Описание syslog в POSIX соответствует тому, что мы пишем здесь. RFC 3164 содержит документацию, касающуюся протокола syslog BSD.

Аргумент priority — это комбинация аргументов level и facility, которые мы показываем в табл. 13.1 и 13.2. Дополнительные сведения об этом аргументе можно найти в RFC 3164. Аргумент message аналогичен строке формата функции printf с добавлением спецификации %m, которая заменяется сообщением об ошибке, соответствующим текущему значению переменной errno. Символ перевода строки может появиться в конце строки message, но он не является обязательным.

Сообщения для журнала имеют значение level (уровень) от 0 до 7, что мы показываем в табл. 13.1. Это упорядоченные значения. Если отправитель не задает значение level, используется значение по умолчанию LOG_NOTICE.

Таблица 13.1. Аргумент level журнальных сообщений

Level Значение Описание
LOG_EMERG 0 Система не может функционировать, экстренная ситуация (наивысший приоритет)
LOG_ALERT 1 Следует немедленно принять меры, срочная ситуация
LOG_CRIT 2 Критическая ситуация
LOG_ERR 3 Состояние ошибки
LOG_WARNING 4 Предупреждение
LOG_NOTICE 5 Необычное, хотя и не ошибочное состояние (значение аргумента level по умолчанию)
LOG_INFO 6 Информационное сообщение
LOG_DEBUG 7 Отладочные сообщения (низший приоритет)

Сообщения также содержат аргумент facility для идентификации типа процесса, посылающего сообщение. Мы показываем его различные значения в табл. 13.2. Если не задано значение аргумента facility, используется его значение по умолчанию — LOG_USER.

Таблица 13.2. Аргумент facility журнальных сообщений

facility Описание
LOG_AUTH Сообщения no безопасности/авторизации
LOG_AUTHPRIV Сообщения по безопасности/авторизации (частные)
LOG_CRON Демон cron
LOG_DAEMON Системные демоны
LOG_FTP Демон FTP
LOG_KERN Сообщения ядра
LOG_LOCAL0 Локальное использование
LOG_LOCAL1 Локальное использование
LOG_LOCAL2 Локальное использование
LOG_LOCAL3 Локальное использование
LOG_LOCAL4 Локальное использование
LOG_LOCAL5 Локальное использование
LOG_LOCAL6 Локальное использование
LOG_LOCAL7 Локальное использование
LOG_LPR Демон принтера
LOG_MAIL Почтовая система
LOG_NEWS Система телеконференций
LOG_SYSLOG Внутренние сообщения системы syslog
LOG_USER Сообщения пользовательского уровня (значение аргумента facility по умолчанию)
LOG_UUCP Система UUCP

Например, демон может сделать следующий вызов, когда вызов функции rename неожиданно оказывается неудачным:

syslog(LOG_INFO|LOG_LOCAL2, "rename(%s, %s): %m", file1, file2);

Назначение аргументов facility и level в том, чтобы все сообщения, которые посылаются процессами определенного типа (то есть с одним значением аргумента facility), могли обрабатываться одинаково в файле /etc/syslog.conf или чтобы все сообщения одного уровня (с одинаковым значением аргумента level) обрабатывались одинаково. Например, файл конфигурации может содержать строки

kern.* /dev/console

local7.debug /var/log/cisco.log

для указания, что все сообщения ядра направляются на консоль, а сообщения относительно отладки со значением аргумента facility, равным local7, добавляются в файл /var/log/cisco.log.

Когда приложение впервые вызывает функцию syslog, она создает дейтаграммный доменный сокет Unix и затем вызывает функцию connect для сокета с заранее известным полным именем, которое создано демоном syslogd (например, /var/run/log). Этот сокет остается открытым, пока процесс не завершится. Другим вариантом является вызов процессом функций openlog и closelog.

#include <syslog.h>

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

void closelog(void);

Функция openlog может быть вызвана перед первым вызовом функции syslog, а функция closelog — когда приложение закончит отправлять сообщения в журнал.

Аргумент ident — это строка, которая будет добавлена в начало каждого журнального сообщения функцией syslog. Часто это имя программы.

Обычно аргумент options формируется путем применения операции логического ИЛИ к константам из табл. 13.3.

Таблица 13.3. Аргумент options (параметр) для функции openlog

Параметр Описание
LOG_CONS Выводить журнал на консоль, если невозможно послать сообщение демону syslogd
LOG_NDELAY Не откладывать создание сокета, открыть его сейчас
LOG_PERROR Записывать сообщение в stderr, а также посылать его демону syslogd
LOG_PID Включать идентификатор процесса (PID) в каждую запись журнала

Обычно доменный сокет Unix не создается при вызове функции openlog. Вместо этого сокет открывается при первом вызове функции syslog. Параметр LOG_NDELAY указывает, что сокет должен создаваться при вызове функции openlog.

Аргумент facility функции openlog задает значение facility, используемое по умолчанию для любого последующего вызова функции syslog, при котором не задается аргумент facility. Некоторые демоны вызывают функцию openlog и задают значение аргумента facility (которое обычно не изменяется для данного демона) и затем в каждом вызове функции syslog задают только аргумент level (поскольку level может изменяться в зависимости от ошибки).

Сообщения для записи в журнал могут также генерироваться командой logger. Это может использоваться в сценариях интерпретатора команд, например для отправки сообщений демону syslogd.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Функция SUM

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

Функция SUM Ваши возможности в подведении итогов не ограничены простым подсчетом записей. Используя функцию SUM, можно генерировать итоговые результаты для всех возвращаемых записей по любым числовым полям. Например, для создания запроса, который генерирует итоги по


Функция uni()

Из книги Fiction Book Designer Краткое руководство автора Автор неизвестен

Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book


Функция uni()

Из книги Fiction Book Designer 3.2. Краткое руководство автора Izekbis

Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book


Функция signal_rt

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Функция signal_rt В книге [24, с. 120] мы привели пример собственной функции signal, вызывавшей функцию sigaction стандарта Posix для установки обработчика сигнала, обеспечивающего надежную семантику Posix. Изменим эту функцию, чтобы обеспечить поддержку реального времени. Новую функцию мы


Функция mq_close

Из книги Технология XSLT автора Валиков Алексей Николаевич

Функция mq_close В листинге 5.20 приведен текст нашей функции mq_close.Листинг 5.20. Функция mq_close//my_pxmsg_mmap/mq_close.с1  #include "unpipc.h"2  #include "mqueue.h"3  int4  mymq_close(mymqd_t mqd)5  {6   long msgsize, filesize:7   struct mymq_hdr *mqhdr;8   struct mymq_attr *attr;9   struct mymq_info *mqinfo;10  mqinfo = mqd;11  if (mqinfo->mqi_magic != MQI_MAGIC) {12   errno =


Функция mq_receive

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

Функция mq_receive В листинге 5.27 приведен текст первой половины функции mq_receive, которая получает необходимые указатели, блокирует взаимное исключение и проверяет объем буфера вызвавшего процесса, который должен быть достаточным для помещения туда сообщения максимально


Функция pthread_rwlock_init

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Функция pthread_rwlock_init Первая функция, pthread_rwlock_init, динамически инициализирует блокировку чтения-записи. Ее текст приведен в листинге 8.2.7-8 Присваивание атрибутов с помощью этой функции не поддерживается, поэтому мы проверяем, чтобы указатель attr был нулевым.9-19 Мы


Функция not

Из книги Fiction Book Designer 3.2. Руководство по созданию книг автора


Функция sum

Из книги Введение в криптографию автора Циммерманн Филипп


Хэш-функция.

Из книги автора

Хэш-функция. Еще одно важное преимущество использования PGP состоит в том, что PGP применяет так называемую «хэш-функцию», которая действует таким образом, что в том случае какого-либо изменения информации, пусть даже на один бит, результат «хэш-функции» будет совершенно


9.3.1. Конфигурационный файл /etc/syslog.conf

Из книги автора

9.3.1. Конфигурационный файл /etc/syslog.conf Это простой текстовый файл, каждая непустая и незакомментированная (знак комментария — #) строка которого имеет следующий формат:<селектор>[;<селектор>...] <действие>Селектор представляет собой правило отбора сообщений, а


Функция uni()

Из книги автора

Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book


Хэш-функция

Из книги автора

Хэш-функция Однако описанная выше схема имеет ряд существенных недостатков. Она крайне медлительна и производит слишком большой объём данных — по меньшей мере вдвое больше объёма исходной информации. Улучшением такой схемы становится введение в процесс преобразования