SYSLOG(3)

ИМЯ
closelog, openlog, 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():
    начиная с glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 и старее:
        _BSD_SOURCE

ОПИСАНИЕ

  openlog()
Функция openlog() открывает для программы соединение со службой журналирования.

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

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

Использование openlog() не обязательно; она будет вызвана syslog() в случае необходимости (в этом случае по умолчанию ident будет установлено в NULL).

  syslog() и vsyslog()
Функция syslog() генерирует сообщение журнала, которое будет передавать syslogd(8).

Аргумент priority составляется из объединения значений facility и level (описано ниже). Если значения facility нет в priority, то по умолчанию используется значение, заданное openlog(), или, если до этого openlog() не вызывался, используется значение LOG_USER.

Оставшиеся аргументы — format, задаются в формате как у printf(3) (а также аргументы, необходимые для format) за исключением последовательности двух символов %m, которые заменяются строкой ошибки strerror(errno). В строку формата не нужно включать конечный символ новой строки.

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

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

  Значения option
Аргумент option у openlog() представляет собой битовую маску объединённых следующих значений:

LOG_CONS
    Писать напрямую в системную консоль, если при отправке в систему журналирования возникла ошибка.

LOG_NDELAY
    Немедленно открыть соединение (обычно соединение открывается при первом сообщении). Например, это может быть полезно, если последующий chroot(2) делает недоступным путь, используемый внутри свойства протоколирования.

LOG_NOWAIT
    Не ждать дочерних процессов, которые могут быть созданы во время журналирования сообщения (библиотека GNU C не создаёт дочерних процессов, так что в Linux этот параметр не действует).

LOG_ODELAY
    Противоположен LOG_NDELAY; открытие подключения откладывается, пока не будет вызван syslog() (этот параметр используется по умолчанию, нет необходимости выставлять его вручную).

LOG_PERROR
    (нет в POSIX.1-2001 или POSIX.1-2008) Также протоколировать сообщение в stderr.

LOG_PID
    Включать PID вызывающего в каждое сообщение.

  Значения facility
Аргумент 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

  Значения level
Определяет важность сообщения. Ниже указаны уровни по уменьшению важности:

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);

СМОТРИТЕ ТАКЖЕ
journalctl(1), logger(1), setlogmask(3), syslog.conf(5), syslogd(8)