Протоколирование работы сервера резервирования (debug)
Синтаксис
/debug[=[< уровень >][:[|< программа >] < размер >[x< количество >]]< спецификация файла >|stdout|stderr] < уровень >::=< числовое значение >|< символьное значение > < числовое значение >::=< маска уровней >|< номер уровня >[+< номер уровня >…] < номер уровня >::= 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536 < символьное значение >::=< имя уровня >[,< имя уровня >…] < имя уровня >::= "TRACE" | "ERROR"| "MSG" | "STATE" | "STPROC" | "INFO" | "INIT" | "EVENT" | "SIG" | "TIMER" | "PROC" | "REPEATE" | "USR" | "FILE" | "NET" | "NET_SEND" | "DBG" < маска уровней >::=результат сложения номеров уровней. Может быть представлена в шестнадцатеричном виде.
Описание
Задаёт параметры трассировочной информации и возможные способы её обработки.
Уровни трассировки можно задавать в числовом или символьном виде.
Доступны следующие уровни:
Имя уровня | Номер уровня (десятичное значение) | Трассировочная информация | ||
---|---|---|---|---|
TRACE | 1 | о вызываемых функциях | ||
ERROR | 2 | об ошибках | ||
MSG | 4 | о ходе выполнения | ||
STATE | 8 | о смене состояний | ||
STRPROC | 16 | о запуске программы-обработчика событий | ||
INFO | 32 | о нештатных ситуациях, которые не привели к прекращению работы системы резервирования | ||
INIT | 64 | при инициализации | ||
EVENT | 128 | о событиях | ||
SIG | 256 | о манипуляциях с сигналами | ||
TIMER | 512 | о тайм-аутах | ||
PROC | 1024 | о запуске и останове программ | ||
REPEATE | 2048 | о периодическом добавлении записи в STATE-файл | ||
USR | 4096 | о дополнительных событиях | ||
FILE | 8192 | о работе с файлами (запись, копирование, удаление и т. д.) | ||
NET | 16384 | о сетевом обмене | ||
NET_SEND | 32768 | об отсылке сообщений | ||
DBG | 65536 | отладочная трассировка |
Числовые значения можно задавать в десятичном или шестнадцатеричном виде. При указании числового значения каждый установленный бит соответствует включенному уровню трассировки. Например, чтобы задать уровни трассировки TRACE, MSG, STATE в числовом виде, надо указывать число 1+4+8 = 1310 (158, 11012), и ключ, соответственно, будет иметь вид /debug=13
. В символьном виде эти же уровни задаются ключом /debug=TRACE,MSG,STATE
.
Примеры задания уровней трассировки:
-debug=2 -debug=0xFFFFFFFF -debug=2+512+64 -debug=0x10+0x400 -debug=32+0x654 -debug=TRACE -debug=TRACE,info,dbg -debug="TRACE,NET,proc"
< Спецификация файла >
задаёт полный путь и имя файла, в который будет записываться
трассировочная информация. Если спецификация файла не обозначена, то по умолчанию используется файл
server.log
в каталоге, указанном переменной окружения SERVER_HOME
или в рабочем каталоге. Если указанный файл не существует, он будет создан. Запись в файл выполняется
до исчерпания ресурсов файловой системы или до достижения максимально допустимого размера файла. По
умолчанию размер файла равен 1048576 байт. Этот размер можно изменить с помощью аргумента
< размер >
(задается в байтах).
После достижения файлом максимального размера будут создаваться новые трассировочные файлы с именами вида
< исходное имя >1
, < исходное имя >2
и т.д., например:
server.log
, server.log1
, server.log2
.
Необходимое количество одновременно хранящихся трассировочных файлов можно задать сразу после размера файла
и символа "x" в опции < количество >
.
Если < количество >
не указано, по умолчанию кроме файла с заданным именем на файловой
системе будет храниться 10 файлов с трассировочной информацией.
В случае превышения максимального количества файлов трассировки при создании нового файла последний из
файлов (server.log10
) удаляется, файл server.log9
переименовывается
в server.log10
и т.д. Файл server.log
переименовывается в
server.log1
.
Пример.
-debug=TRACE:200/usr/linter/debug/server_db1.log -debug=:200x15/usr/linter/debug/server_db1.log
Если в качестве имени файла указать стандартные файлы вывода stdout
или stderr
без размера, то поток будет перенаправлен в стандартный поток вывода или ошибок соответственно.
Если необходимо только управление перенаправлением вывода, перечисление уровней трассировки можно опустить и значение ключа начинать сразу с символа ":". При этом уровни будут соответствовать значениям по умолчанию.
Если после символа ":" сразу следует символ "|", то следующая за ним строка будет восприниматься как пользовательская программа с аргументами, которую надо запустить при старте сервера резервирования и передать ей на вход поток трассировочной информации. Эта программа может использоваться, в частности, для разбивки потока на файлы и/или фильтрации некоторых сообщений.
Пример.
Поток трассировки передан на вход программы awk, которая обрабатывает данные в соответствии с внутренним алгоритмом и результаты обработки помещает в файл program.awk: Server -debug=":|awk -f program.awk"
Пример программы фильтрации трассировки приведен в приложении 1.
Умолчания:
-
на стандартный поток ошибок выводятся только сообщения об ошибках (если ключ не задан);
-
все уровни трассировки, осуществляющие периодическую запись, выключены, в log-файл помещается информация только о событиях системы резервирования;
-
включены уровни
MSG
,EVENT
,INIT
,ERROR
,PROC
,TIMER
,USR
,NET_SEND
,STATE
. Этой информации обычно достаточно для отслеживания поведения сервера; -
трассировочный поток сервера резервирования направляется в файл
server.log
, который ищется в каталоге, указанном в переменной окруженияSERVER_HOME
; -
количество одновременно хранящихся трассировочных файлов равно 10;
-
размер файла трассировки 1048576 байт.
Таким образом, значение ключа /debug
по умолчанию равно:
/debug=MSG,EVENT,INIT,ERROR,PROC,TIMER,USR,NET_SEND, STATE:1048576x10$SERVER_HOME/server.log.
Формат трассировочных записей
Трассировочные записи имеют следующий формат:
< источник трассировки > < детализация трассировки > < дата/время трассировки > < трассировочная информация >
где:
< источник трассировки >::=HOTRES:< уровень трассировки > < детализация трассировки >::=< имя исходного модуля >:< номер строки >. < дата/время трассировки >::=ddmm:hh:mi:ss.ff < трассировочная информация >::=символьная строка.
Примеры трассировочных записей:
HOTRES:INFO init.c:503 0306:10:10:54.945223 Can't open STATE file ./STATE, errno = 2, No such file or directory HOTRES:TRACE init.c: 504 0306:10:10:54.945223 'ReadStateFromFile' Leave fopen HOTRES: INFO init.c:1909 0306:10:10:54.945223 Error while reading STATE file of work DB. State set to UNDEFINED. HOTRES: TRACE states.c:34 0306:10:10:54.945223 'GetStateByName' Call from init.c:1913 HOTRES: DBG states.c: 36 0306:10:10:54.945223 Get state with name UNDEFINED HOTRES: TRACE states.c: 45 0306:10:10:54.945223 'GetStateByName' Leave UNDEFINED HOTRES: TRACE backup.c: 87 0306:10:10:54.945223 'DbExist' Call from init.c:1916 HOTRES: TRACE backup.c: 100 0306:10:10:54.945223 'DbExist' Leave Db not found. HOTRES: TRACE init.c: 499 0306:10:10:54.945223 'ReadStateFromFile' Call from init.c:1947 HOTRES: INFO init.c: 503 0306:10:10:54.945223 Can't open STATE file ./ARC/STATE, errno = 2, No such file or directory HOTRES: TRACE init.c: 504 0306:10:10:54.945223 'ReadStateFromFile' Leave fopen HOTRES: INFO init.c:1949 0306:10:10:54.945223 Error while reading STATE file of backup DB. State set to UNDEFINED. HOTRES: TRACE states.c:34 0306:10:10:54.945223 'GetStateByName' Call from init.c:1953 HOTRES: DBG states.c:36 0306:10:10:54.945223 Get state with name UNDEFINED HOTRES: TRACE states.c:45 0306:10:10:54.945223 'GetStateByName' Leave UNDEFINED HOTRES: DBG init.c:2011 0306:10:10:54.945223 FullPreviousState.State = UNDEFINED HOTRES: ERROR init.c:2031 0306:10:10:54.945223 nodetab file is not found. HOTRES: TRACE init.c:2032 0306:10:10:54.945223 'Init' Leave FAILED HOTRES: ERROR server.c:91 0306:10:10:54.945223 Init failed. Exit. HOTRES: TRACE server.c:93 0306:10:10:54.945223 'server' Leave FAILED