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()
может начать подготавливать измененную строку. В случае же, когда
строка уже не существует, результаты неопределены. Наиболее переносимо
будет использовать строковую константу.
Никогда не передавайте строку с предоставленным пользователем
форматом, лучше используйте