closelog, openlog, syslog, vsyslog -
отправка
сообщений
в службу
журналирования
Standard C library (
libc,
-lc)
#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);
vsyslog():
Начиная с glibc 2.19:
_DEFAULT_SOURCE
В версии glibc 2.19 и более ранних:
_BSD_SOURCE
Функция
openlog()
открывает
для
программы
соединение
со службой
журналирования.
Строка, на
которую
указывает
ident, будет
предварять
каждое
сообщение,
обычно это
имя
программы.
Если
значение
ident
равно NULL, то
используется
имя
программы
(в POSIX.1-2008 не
указано,
что
случается,
если
ident
равно NULL).
В
аргументе
option
указываются
флаги,
контролирующие
действия
openlog() и
последующих
вызовов
syslog().
Аргумент
facility
устанавливает
значения
по
умолчанию,
если не
будет
указано
другое в
последующих
вызовах
syslog().
Значения
для
option и
facility
представлены
ниже.
Использование
openlog() не
обязательно;
она будет
вызвана
syslog()
в случае
необходимости
(в этом
случае по
умолчанию
ident будет
установлено
в NULL).
Функция
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() не
обязательно.
Аргумент
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
используется
для
указания
типа
программы,
записывающей
сообщение.
Благодаря
этому с
помощью
файла
настройки
можно
по-разному
обрабатывать
сообщения
от разных
объектов.
- 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);
journalctl(1),
logger(1),
setlogmask(3),
syslog.conf(5),
syslogd(8)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]