Протоколирование работы сервера резервирования (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"
<маска уровней>::=результат сложения номеров уровней. Может быть представлена в шестнадцатеричном виде.
Описание

Задаёт параметры трассировочной информации и возможные способы её обработки.

Уровни трассировки можно задавать в числовом или символьном виде.

Доступны следующие уровни:

Имя уровняНомер уровня (десятичное значение)Трассировочная информация
TRACE1о вызываемых функциях
ERROR2об ошибках
MSG4о ходе выполнения
STATE8о смене состояний
STRPROC16о запуске программы-обработчика событий
INFO32о нештатных ситуациях, которые не привели к прекращению работы системы резервирования
INIT64при инициализации
EVENT128о событиях
SIG256о манипуляциях с сигналами
TIMER512о тайм-аутах
PROC1024о запуске и останове программ
REPEATE2048о периодическом добавлении записи в STATE-файл
USR4096о дополнительных событиях
FILE8192о работе с файлами (запись, копирование, удаление и т. д.)
NET16384о сетевом обмене
NET_SEND32768об отсылке сообщений
DBG65536отладочная трассировка

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