Основы программирования в Linux - Страница 76
В зависимости от настройки системы сообщения типа
LOG_EMERLOG_ALERTLOG_DEBUGsyslogУ сообщения, создаваемого
syslogmessagesyslogformatprintfsyslogprintfmessage%merrnoВыполните упражнение 4.13.
syslogВ этой программе осуществляется попытка открыть несуществующий файл.
#include <syslog.h>#include <stdio.h>#include <stdlib.h>int main() { FILE *f; f = fopen("not_here", "r"); if (!f) syslog(LOG_ERR|LOG_USER, "oops - %mn"); exit(0);}Когда вы откомпилируете и выполните программу syslog.с, то не увидите никакого вывода, но в конце файла /var/log/messages теперь содержится следующая строка:
Jun 9 09:24:50 suse103 syslog: oops — No such file or directoryКак это работает
В данной программе вы пытаетесь открыть файл, которого нет. Когда попытка заканчивается неудачно, вы вызываете функцию
syslogОбратите внимание на то, что регистрируемое сообщение не указывает, какая программа вызвала средство регистрации; оно просто констатирует тот факт, что была вызвана функция
syslog%mВ файле syslog.h определены и другие функции, применяемые для изменения поведения средств ведения системных журналов.
К ним относятся следующие функции:
#include <syslog.h> void closelog(void);void openlog(const char *ident, int logopt, int facility);int setlogmask(int maskpri);Вы можете изменить способ представления ваших регистрируемых сообщений, вызвав функцию
openlogidentfacilitysyslogLOG_USERlogoptsyslogORТаблица 4.7
Параметр logopt | Описание |
|---|---|
LOG_PID | Включает в сообщения идентификатор процесса, уникальный номер, выделяемый системой каждому процессу |
LOG_CONS | Посылает сообщения на консоль, если они не могут быть записаны |
LOG_ODELAY | Открывает средство регистрации сообщений при первом вызове функции syslog |
LOG_NDELAY | Открывает средство регистрации сообщений немедленно, не дожидаясь первого регистрируемого сообщения |
Функция
openlogcloselogopenlogsyslogВы можете управлять приоритетом регистрируемых вами сообщений с помощью установки маски регистрации, используя функцию
setlogmasksyslogLOG_DEBUGВы можете создать маску для регистрируемых сообщений, используя значение
LOG_MASK(priority)LOG_UPTO(priority)Выполните упражнение 4.14.
logmaskВ этом примере вы увидите
logmask#include <syslog.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>