openlog(3) отправка сообщений в службу

Other Alias

closelog, syslog, vsyslog

ОБЗОР

#include <syslog.h>

void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);

void vsyslog(int priority, const char *format, va_list ap);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

vsyslog(): _BSD_SOURCE

ОПИСАНИЕ

Функция closelog() закрывает файловый дескриптор, использованный для записи в службу журналирования. Использование closelog() не обязательно.

Функция openlog() открывает для программы соединение со службой журналирования. Строка, на которую указывает ident, будет предварять каждое сообщение, обычно это имя программы. Если значение ident равно NULL, то используется имя программы (в POSIX.1-2008 не указано, что случается, если ident равно NULL).

В аргументе option указываются флаги, контролирующие действия openlog() и последующих вызовов syslog(). Аргумент facility устанавливает значения по умолчанию (если не будет указано иначе) для последующих вызовов syslog(). Значения для option и facility представлены ниже. Использование openlog() не обязательно, она будет вызвана syslog() в случае необходимости (в этом случае ident будет установлено по умолчанию в NULL).

Функция syslog() создает сообщение журнала, которое доставляется syslogd(8). Аргумент priority формируется в результате логического OR значений facility и level (описанных ниже). Оставшиеся аргументы --- format в формате printf(3) и аргументы, необходимые для format, за исключением последовательности двух символов %m, заменяемых строкой ошибки strerror(errno). В случае необходимости можно добавить новую строку.

Функция vsyslog() выполняет то же самое, что и syslog() с той лишь разницей, что она принимает набор аргументов, получаемых с использованием списка макросов stdarg(3).

Следующий список используется в качестве значения для option, facility и priority.

параметр

Аргумент option для openlog() может образовываться логическим OR из следующих значений:
LOG_CONS
Писать напрямую в системную консоль, если при отправке в систему журналирования возникла ошибка.
LOG_NDELAY
Немедленно открыть соединение (обычно соединение открывается при первом сообщении).
LOG_NOWAIT
Не ждать дочерних процессов, которые могут быть созданы во время журналирования сообщения (библиотека GNU C не создаёт дочерних процессов, так что в Linux этот параметр не действует).
LOG_ODELAY
Противоположен LOG_NDELAY; открытие подключения откладывается, пока не будет вызван syslog() (этот параметр используется по умолчанию, нет необходимости выставлять его вручную).
LOG_PERROR
(Нет в POSIX.1-2001 или POSIX.1-2008.) Также выводить сообщение в stderr.
LOG_PID
Включать PID в каждое сообщение.

объект

Аргумент facility используется для указания типа программы, записывающей сообщение. Благодаря этому с помощью файла настройки можно по-разному обрабатывать сообщения от разных объектов.
LOG_AUTH
сообщения безопасности/авторизации
LOG_AUTHPRIV
сообщения безопасности/авторизации (private)
LOG_CRON
планировщик заданий (cron и at)
LOG_DAEMON
системные службы без определенного значения объекта
LOG_FTP
служба FTP
LOG_KERN
сообщения ядра (не могут быть созданы пользовательскими процессами)
с LOG_LOCAL0 по LOG_LOCAL7
зарезервировано для локального использования
LOG_LPR
подсистема печати
LOG_MAIL
почтовая подсистема
LOG_NEWS
подсистема новостей USENET
LOG_SYSLOG
сообщения, сгенерированные самой службой syslogd(8)
LOG_USER (по умолчанию)
обычные сообщения пользовательского уровня
LOG_UUCP
подсистема UUCP

уровень

Определяет важность сообщения. Ниже указаны уровни по уменьшению важности:
LOG_EMERG
система в нерабочем состоянии
LOG_ALERT
необходимо срочное вмешательство
LOG_CRIT
критические состояния
LOG_ERR
ошибки
LOG_WARNING
предупреждения
LOG_NOTICE
обычные, но важные сообщения
LOG_INFO
информационные сообщения
LOG_DEBUG
сообщения уровня отладки

Для ограничения журналирования только в определенные уровни можно использовать функцию setlogmask(3).

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
ИнтерфейсАтрибутЗначение
openlog(), closelog() безвредность в нитяхбезвредно (MT-Safe)
syslog(), vsyslog() безвредность в нитяхбезвредно (MT-Safe env locale)

СООТВЕТСТВИЕ СТАНДАРТАМ

Функции openlog(), closelog() и syslog() (но не vsyslog()) описаны в SUSv2, POSIX.1-2001 и POSIX.1-2008. В POSIX.1-2001 для facility описаны только LOG_USER и LOG_LOCAL*. Однако, за исключением LOG_AUTHPRIV и LOG_FTP, остальные значения facility присутствуют в большинстве систем UNIX. Значение LOG_PERROR для option не описано в POSIX.1-2001 или POSIX.1-2008, однако доступно в большинстве версий UNIX.

ЗАМЕЧАНИЯ

Аргумент ident при вызове openlog() сохраняется как есть. Поэтому, если строка меняется, syslog() может начать добавлять уже изменённую строку. Если строка перестаёт существовать, то это может привести к непредвиденным результатам. Наиболее переносимый способ в данном случае --- использовать строковую константу.

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

    syslog(priority, "%s", string);