SYSLOG(3)

НАЗВАНИЕ
closelog, openlog, syslog - сообщения программе, ведущей системный журнал

СИНТАКСИС
#include <syslog.h>

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

#include <stdarg.h>

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

ОПИСАНИЕ
closelog() закрывает описатель, используемый для записи данных в журнал. Использование closelog() необязательно.

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

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

ПАРАМЕТРЫ
Этот раздел описывает параметры, используемые для установки значений option, facility и priority.

  option
Аргумент option, относящийся к функции openlog() , имеет значение ИЛИ для следующих выражений:

LOG_CONS
    - написать сообщение об ошибке прямо на консоли, если была ошибка при записи данных в системный журнал;

LOG_NDELAY
    - устанавливать соединение немедленно (обычно оно устанавливается только при поступлении первого сообщения);

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

LOG_ODELAY
    - обратно от LOG_NDELAY; открытие соединения откладывается до вызова syslog().

LOG_PERROR
    - посылать сообщение еще и в поток stderr (отсутствует в SUSv3);

LOG_PID
    - добавлять к каждому сообщению идентификатор

  facility .
Аргумент facility используется для указания типа программы, записывающей сообщения. Это позволяет файлу конфигурации указывать, что сообщения от различных программ будут по-разному обрабатываться.

LOG_AUTH
    - сообщения о безопасности/авторизации (РЕКОМЕНДУЕТСЯ использовать вместо него LOG_AUTHPRIV).

LOG_AUTHPRIV
    - сообщения о безопасности/авторизации (частные);

LOG_CRON
    - демон часов (cron и at);

LOG_DAEMON
    - другие системные демоны;

LOG_KERN
    - сообщения ядра;

LOG_LOCAL0 до LOG_LOCAL7
    зарезервированы для определения пользователем;

LOG_LPR
    - подсистема принтера;

LOG_MAIL
    - почтовая подсистема;

LOG_NEWS
    - подсистема новостей USENET;

LOG_SYSLOG
    - сообщения, генерируемые syslogd;

LOG_USER
    (по умолчанию) - общие сообщения на уровне пользователя ;

LOG_UUCP
    - подсистема UUCP

  level ,
определяющая степень важности сообщения. Далее значения приводятся по понижению степени их важности:

LOG_EMERG
    - система остановлена;

LOG_ALERT
    - требуется немедленное вмешательство;

LOG_CRIT
    - критические условия;

LOG_ERR
    - ошибки;

LOG_WARNING
    - предупреждения;

LOG_NOTICE
    - важные рабочие условия;

LOG_INFO
    - информационные сообщения;

LOG_DEBUG
    - сообщения об отладке.

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

СООТВЕТСТВИЕ СТАНДАРТАМ
Функции openlog(), closelog(), и syslog() (но не vsyslog()) описаны в SUSv2 и POSIX 1003.1-2001. POSIX 1003.1-2001 описывает только значения LOG_USER и LOG_LOCAL* для facility. Кроме значений LOG_AUTHPRIV и LOG_FTP, другие значения facility присутствуют в различных системах Unix. Значение LOG_PERROR для option не описано в POSIX 1003.1-2001, но присутствует в большинстве версий Unix.

ПРИМЕЧАНИЯ ПО ИСТОРИИ
Функция syslog появилась в BSD 4.2. BSD 4.3 описывает openlog(), syslog(), closelog(), и setlogmask(). 4.3BSD-Reno описывает vsyslog(). разумеется ранние версии функций v* использовали механизм <varargs.h>, не совместимый с <stdarg.h>.

ЗАМЕЧАНИЯ
Аргумент ident функции openlog(), по-видимому, заносится один в один. Поэтому, если строка, на которую он указывает, меняется, то syslog() может начать подготавливать измененную строку. В случае же, когда строка уже не существует, результаты неопределены. Наиболее переносимо будет использовать строковую константу.

Никогда не передавайте строку с предоставленным пользователем форматом, лучше используйте
    syslog("%s", string);

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