syslog, closelog, openlog - сообщения программе, ведущей системный журнал
НАЗВАНИЕcloselog, openlog, syslog - сообщения программе, ведущей
системный журнал
СИНТАКСИС
#include
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
#include
void vsyslog(int priority, const char *format, va_list
ap);
ОПИСАНИЕ
closelog() закрывает описатель, используемый для записи
данных в журнал. Использование closelog() необязательно.
openlog() устанавливает связь с программой, ведущей
системный журнал. Строка ident добавляется к каждому
сообщению и обычно представляет собой название программы.
Аргумент option указывает флаг управляющий работой open-
log() и соответствующих вызовов syslog(). Аргумент facil-
ity устанаваливает значение по умолчанию если не
указываются соответствующие параметры при вызовах sys-
log(). Значения option и facility приводятся ниже.
Использование openlog() тоже необязательно, оно при
необходимости автоматически будет вызвано функцией sys-
log(), и в этом случае значение ident будет установлено
равным NULL.
syslog() создает сообщение для журнала, которое передается
syslogd(8). priority получаеся при логическом сложении
facility и level, описанных в следующей главе. Остаются
аргументы format (как и в printf(3)) и аргументы для for-
mat, кроме того, что сочетание %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_AUTH-
PRIV).
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() (но не vsys-
log()) описаны в 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* использовали механизм , не
совместимый с .
ЗАМЕЧАНИЯ
Аргумент ident функции openlog(), по-видимому, заносится
один в один. Поэтому, если строка, на которую он
указывает, меняется, то syslog() может начать
подготавливать измененную строку. В случае же, когда
строка уже не существует, результаты неопределены.
Наиболее переносимо будет использовать строковую
константу.
Никогда не передавайте строку с предоставленным
пользователем форматом, лучше используйте
syslog("%s", string);