Менеджер системного журнала
slogger [-c] [-f уровень_серьезности] [-l журнал[,размер]] [-s размер] [-v[v]...]
O_SYNC
в режиме принудительной записи зарегистрированных событий на накопитель.7
, высшему уровню – 0
. Значение по умолчанию – 7
.CLOCK_MONOTONIC
вместо реального времени._NTO_TRACE_USERFIRST
до _NTO_TRACE_USERLAST
, как указано в <sys/trace.h>
. Для более подробной информации см. TraceEvent().По умолчанию события не генерируются.
ЗОСРВ «Нейтрино»
aarch64, 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()
Предыдущий раздел: Сервисы