syslog(3) | Library Functions Manual | syslog(3) |
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() представляет собой битовую маску объединённых следующих значений:
Аргумент facility используется для указания типа программы, записывающей сообщение. Благодаря этому с помощью файла настройки можно по-разному обрабатывать сообщения от разных объектов.
Определяет важность сообщения. Ниже указаны уровни по уменьшению важности:
Для ограничения журналирования только в определенные уровни можно использовать функцию 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 <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
5 февраля 2023 г. | Linux man-pages 6.03 |