Протоколирование работы сервера резервирования (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