slogger

Менеджер системного журнала

Синтаксис:

slogger [-c] [-f уровень_серьезности] [-l журнал[,размер]] [-s размер] [-v[v]...]

Опции:

-c
Открыть файл журнала с использованием O_SYNC в режиме принудительной записи зарегистрированных событий на накопитель.
-f уровень_серьезности
Регистрировать в файле журнала события, уровень серьезности которых не ниже заданного. Эту опцию целесообразно использовать только вместе с опцией -l; slogger всегда сохраняет все события в своих внутренних буферах. Низшему уровню серьезности соответствует значение 7, высшему уровню – 0. Значение по умолчанию – 7.
-l журнал[,размер]
Записать в журнал копию каждого события, числовое значение уровня серьезности которого меньше или равно значению, заданному в опции -f. Если вслед за именем файла введен необязательный аргумент размер, утилита slogger переключается от одного файла к другому (журнал0 и журнал1), когда размер файла достигает заданного значения.
-m
Использовать CLOCK_MONOTONIC вместо реального времени.
-s размер
Определить размер буфера (в килобайтах) в оперативной памяти для хранения регистрируемых событий (системных сообщений). При переполнении буфера новые сообщения записываются вместо наиболее старых. Размер по умолчанию – 256 КБ.
-u id
Генерировать пользовательское строковое событие с указанным ID на каждое получаемое сообщение. Указанный ID должен находиться в диапазоне от _NTO_TRACE_USERFIRST до _NTO_TRACE_USERLAST, как указано в <sys/trace.h>. Для более подробной информации см. TraceEvent().

По умолчанию события не генерируются.

-v[v]...
Вывести расширенную информацию; чем больше символов v, тем более подробная информация выводится.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

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 создает следующие устройства в пространстве имен:

/dev/slog
Используется для чтения и записи системных журнальных сообщений.
/dev/console
Реализует простой консольный терминал ввода-вывода, записывающий в системный журнал всю информацию, вводимую пользователем на данном устройстве. При попытке чтения всегда возвращается признак конца файла (end-of-file).

Приложение, отправляющее новое системное журнальное сообщение, должно обратиться к библиотечным подпрограммам 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

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино»

Тематические ссылки:

sloginfo

slogb(), slogf(), slogi(), vslogf()




Предыдущий раздел: Сервисы