Менеджер системного журнала
slogger [-c] [-f уровень_серьезности] [-l журнал[,размер]] [-s размер] [-v[v]...]
O_SYNC
в режиме принудительной записи зарегистрированных событий на накопитель.7
, высшему уровню – 0
. Значение по умолчанию – 7
.ЗОСРВ «Нейтрино»
arm, armv7, e2k, mips, ppc, x86
Утилита slogger (системный логгер) является центральным менеджером, осуществляющим регистрацию системных сообщений от приложений. Сообщения сохраняются в циклическом буфере и могут считываться по мере необходимости или в режиме реального времени. При переполнении буфера новые сообщения записываются вместо наиболее старых сообщений. Если используются опции -l и -f, утилита slogger также записывает сообщения в файл журнала (см. описание ниже).
Каждому системному сообщению присваиваются уникальный старший код, младший код и уровень серьезности. Предусмотрены следующие уровни серьезности:
Имя в манифесте | Значение | Описание |
---|---|---|
_SLOG_SHUTDOWN | 0 | Немедленное завершение работы системы (например, в целях использования OEM) |
_SLOG_CRITICAL | 1 | Непредвиденная критическая ошибка (например, ошибка жесткого диска) |
_SLOG_ERROR | 2 | Непредвиденная исправимая ошибка (например, необходимость сброса аппаратного контролера) |
_SLOG_WARNING | 3 | Предвиденная ошибка (например, ошибка четности в последовательном порту) |
_SLOG_NOTICE | 4 | Предупреждение (например, "нет бумаги") |
_SLOG_INFO | 5 | Информация (например, "печатается страница 3") |
_SLOG_DEBUG1 | 6 | Сообщения отладки (например, с обычной детализацией) |
_SLOG_DEBUG2 | 7 | Сообщения отладки (например, с подробной детализацией) |
Если задана опция -l журнал, утилита slogger создает отдельный поток, сохраняющий каждое системное сообщение, которое имеет уровень серьезности, определенный опцией -f.
Если используется необязательный аргумент размер в опции -l, утилита slogger переключается от одного файла к другому (журнал0 и журнал1). Когда размер файла достигает заданного значения, утилита slogger закрывает данный файл и открывает другой файл. Этот файл усекается до нулевой длины, и в него записываются новые сообщения, пока файл не будет заполнен. Затем эта процедура переключения выполняется повторно. Таким образом, всегда существует два файла; в одном из них содержатся самые последние сообщения, а в другом – недавние сообщения.
Приложения, которые не располагают стандартным потоком вывода, отображаемым на консоли, должны использовать утилиту slogger для регистрации уведомлений, предупреждений и ошибок. К таким приложениям относятся все драйверы и менеджеры ресурсов.
Менеджер slogger создает следующие устройства в пространстве имен:
Приложение, отправляющее новое системное журнальное сообщение, должно обратиться к библиотечным подпрограммам slogb(), slogf(), slogi() и vslogf(). Эти подпрограммы форматируют данные и осуществляют запись в файл /dev/slog
.
Для просмотра журнала используется утилита sloginfo. Приложение, считывающее системные журнальные сообщения, может открыть файл /dev/slog
для чтения и вызвать функцию read(). В каждой операции чтения может возвращаться одно или несколько сообщений, однако сообщения никогда не разбиваются на части в одной операции чтения.
Открыть файл /dev/slog
для чтения могут несколько приложений одновременно. Любое приложение обращается к собственной копии данных и не влияет на работу других приложений. Возможно использование нескольких фильтров, работающих параллельно и обеспечивающих поиск определенных журнальных сообщений. Ниже приведен пример простого фильтра для вывода кодов и уровней серьезности:
#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <time.h>#include <errno.h>#include <sys/slog.h>int main( int argc, char *argv[] ){int events[4096];int *evp;int n;int wait = 0; // Set to 1 to block and print new events as they arrive.int fd;fd = open( "/dev/slog", wait ? O_RDONLY : O_RDONLY | O_NONBLOCK );for ( ; ; ){int cnt;// Read some events.n = read( fd, events, sizeof( events ) );if ( n == -1 ){// Normal case for a non-blocking read with no events.if ( errno == EAGAIN )exit( EXIT_SUCCESS );exit( EXIT_FAILURE );}// Converts bytes to ints (all events are composed of ints).n /= sizeof( int );if ( n == 0 )break;for ( evp = events ; evp < &events[n]; evp += cnt ){int major, minor, severity, txt;time_t sec;char timebuf[60];major = _SLOG_GETMAJOR( evp[1] );minor = _SLOG_GETMINOR( evp[1] );cnt = _SLOG_GETCOUNT( evp[0] ) + _SLOG_HDRINTS;severity = _SLOG_GETSEVERITY( evp[0] );txt = _SLOG_GETTEXT( evp[0] );sec = evp[2];strftime( timebuf, sizeof( timebuf ), "%h %d %T", localtime( &sec ) );printf( "%s %d %5d %2d ", timebuf, severity, major, minor );if ( txt )printf( "%s", (char *)&evp[_SLOG_HDRINTS] );}}exit( EXIT_SUCCESS );}
Для очистки буфера системного журнала можно вызвать unlink( "/dev/slog" ) из программы, либо rm /dev/slog
из командного интерпретатора.
Менеджер slogger используется вместо прежнего сервиса системного журнала Unix syslogd. Библиотечные подпрограммы Unix для syslogd выводят свои сообщения в /dev/console
. Менеджер slogger перехватывает и регистрирует этот вывод.
Утилиту slogger следует запускать сразу же после начальной загрузки системы – см. главу «Управление запуском ЗОСРВ «Нейтрино» документа «Руководство системного программиста (администратора)» КПДА.10964-01 32. В противном случае сообщения от менеджеров и драйверов, запускаемых перед запуском данной утилиты, могут быть утрачены. Если уничтожить (или не запускать) утилиту slogger, будут потеряны все сообщения, отправляемые программами в системный журнал slogger. После запуска (или перезапуска) утилиты slogger новые сообщения направляются в новый системный журнал slogger.
Регистрация системных сообщений:
slogger
Выделение в оперативной памяти буфера размером 100 КБ для системных сообщений:
slogger -s 100
В дополнение к сохранению в буфере в оперативной памяти, запись в файл системных журнальных сообщений, имеющих уровень серьезности 0
, 1
или 2
:
slogger -l /var/logs/slogs -f 2
В дополнение к сохранению в буфере в оперативной памяти, запись в файл всех системных журнальных сообщений. Поскольку задана опция "размер", происходит переключение между файлами журнала slogs0 и slogs1 (когда размер используемого файла достигает 100 КБ):
slogger -l /var/logs/slogs,100k
Базовые подсистемы ЗОСРВ «Нейтрино»
slogb(), slogf(), slogi(), vslogf()
Предыдущий раздел: Сервисы