7.2. Логирование в консоль браузера

Инструмент разработчика, транслирующий серверные логи пользовательской сессии в консоль DevTools браузера. Сообщения группируются в сворачиваемые блоки по операциям и SQL-запросам, поэтому ход выполнения читается как дерево, а не плоский поток.

7.2.1. Окно «Настройки логирования»

Окно открывается кнопкой настроек логирования в правой части главного меню приложения.

7.2.1.1. Компоновка

Каналы логирования расположены колонками. Каждая колонка содержит тумблер канала и выпадающий список уровня под ним. Канал «Скрипт» показывается только в Oracle решении: в PostgreSql решении он вывода не даёт, поэтому колонка не создаётся.

Каналы логирования

Канал

Серверные логгеры

Что логируется

Операции

ru.bitec.engine.model.operation

Выполнение операций выборок: сворачиваемая группа на каждую операцию, длительность в закрывающем сообщении, ошибки выполнения.

SQL

jdbc.sqltiming

Текст SQL-запросов с подставленными значениями параметров и временем выполнения, сгруппированный в пачки по выборкам и категориям.

Скрипт

ru.bitec.engine.script

Паскаль-скриптер (Oracle решение): на TRACE — вызовы встроенных функций скриптера с аргументами (call: ExecSQL, call: DoLookup, call: SetVar и т.д.), на WARN/ERROR — сбои среды выполнения. Прикладной код PostgreSql решения этим каналом не покрывается: Scala пишет в ru.bitec.app, а Jexl-скрипты выполняются в ru.bitec.gtk.sys.jexl. Поэтому в PostgreSql решении канал не показывается.

7.2.1.2. Поведение

  • Включение тумблера применяет к каналу уровень, выбранный в списке под ним; выключение переводит канал в OFF.

  • Список уровня доступен только при включённом тумблере; выбор уровня применяется сразу.

  • Набор уровней у каждого канала свой — уровни, не дающие полезного вывода, исключены: Операции — TRACE и DEBUG, SQL — TRACE, DEBUG и INFO, Скрипт — все уровни. Что отображается на каждом уровне — в разделе «Уровни каналов».

  • При открытии окно показывает фактические уровни каналов текущей сессии, поэтому состояние тумблеров переживает повторное открытие окна. Если уровень канала на сервере не входит в список (например, задан конфигурацией), канал полезного вывода не даёт: тумблер показан выключенным, а список — уровнем включения по умолчанию.

  • Уровни действуют в пределах сессии. Начальные значения задаются элементом clientLog файла global3.config.xml (operationLevel, sqlLevel, scriptLevel), по умолчанию все каналы выключены.

  • Переключение каналов на серверный лог не влияет: уровни, заданные конфигурацией logback, сохраняются, канал лишь добавляет к ним подробности, которых требует консоль браузера.

Note

При переподключении сессии (обрыв соединения) уровни каналов сбрасываются к значениям конфигурации.

7.2.1.3. Уровни каналов

По умолчанию все каналы выключены (OFF). Уровень, который тумблер ставит при включении, — рабочий уровень канала: Операции — DEBUG, SQL — INFO, Скрипт — TRACE. Если нет особой задачи, пользоваться стоит именно ими.

Что отображается на каждом уровне

Канал

Уровень

Что отображается

Операции

DEBUG

Рабочий уровень: сворачиваемые группы «Выборка -> Операция» с длительностью выполнения и ошибками завершения.

Операции

TRACE

Дополнительно к группам — служебные сообщения жизненного цикла операций (execute: <имя>, addChild, dispose и т.п.) плоскими строками. Шумный; нужен только при отладке самого движка операций.

SQL

INFO

Рабочий уровень: текст запросов с подставленными параметрами и временем выполнения, сгруппированный в пачки.

SQL

DEBUG, TRACE

Тот же состав, что INFO, но log4jdbc дополняет каждый запрос отладочным заголовком (вызвавший JDBC-метод, номер соединения). В консоли браузера заголовок срезается — разница видна только в SSH и серверном логе; TRACE сверх DEBUG ничего не добавляет.

Скрипт

TRACE

Рабочий уровень: вызовы встроенных функций скриптера с аргументами (call: ExecSQL, call: DoLookup и т.д.) — основной поток канала.

Скрипт

DEBUG, INFO

Только редкие информационные сообщения (DebugMsg скрипта, результат ShellExec); собственных сообщений уровня DEBUG канал не пишет, поэтому оба уровня показывают одно и то же.

Скрипт

WARN, ERROR

Режим «только проблемы»: предупреждения о нереализованных или некорректно вызванных функциях среды выполнения (WARN) и сбои выполнения (ERROR).

Упавшие SQL-запросы логируются на ERROR независимо от уровня канала SQL: они попадают в консоль при любом включённом уровне. У канала операций собственных сообщений выше DEBUG нет, поэтому уровни INFOERROR из его списка исключены — канал на них молчал бы.

Сообщения уровней TRACE и DEBUG выводятся через console.debug и по умолчанию скрыты фильтром уровней DevTools — включите Verbose (см. «Как ориентироваться в логе»).

7.2.2. Структура лога

Вложенность передаётся сворачиваемыми группами консоли, вид узла — цветным бейджем в начале заголовка:

Бейджи

Бейдж

Значение

OPER

Группа операции: «Выборка -> Операция». Закрывающее сообщение Executed: Выборка -> Операция [N ms] содержит длительность выполнения.

SQL

Пачка SQL-запросов одной выборки. Открыта не более одной пачки: запросы той же выборки продолжают её, смена выборки закрывает текущую пачку и открывает следующую на том же уровне.

DATA

Категория внутри пачки: запросы SQL-блоков операции; заголовок запроса содержит имя блока, например [DEFAULT].

REG

Категория внутри пачки: запросы реестра настроек.

META

Категория внутри пачки: остальные запросы движка (метаданные, служебные).

Каждый запрос — вложенная свёрнутая группа: заголовок — однострочная сводка с временем выполнения {executed in N msec}, внутри — полный текст запроса.

Пример структуры:

> [OPER] Gs3_QAApplication -> RANDOM400ROWSCOUNT
    > [SQL] Gs3_QAApplication
        > [META]
            > SELECT ... {executed in 1 msec}
        > [REG]
            > select * from btk_registry where ... {executed in 1 msec}
    > [OPER] Btk_User#List -> ONLOADMETA
    Executed: Btk_User#List -> ONLOADMETA [27 ms]

Имена выборок в заголовках сокращены до последнего сегмента (Btk_User#List вместо gtk-ru.bitec.app.btk.Btk_User#List); полные имена сохраняются в серверных логах и SSH.

7.2.3. Ошибки

Ошибки не прячутся в свёрнутых группах: любое событие уровня ERROR сначала закрывает все открытые группы и выводится в корень консоли красной строкой. Закрываются в том числе группы родительских операций: если ошибка произошла во вложенной операции, закрывающие сообщения Executed: внешних операций выводятся уже в корень консоли, после ошибки — это ожидаемое поведение, а не сбой вложенности.

  • Упавший SQL-запрос: красная строка SQL [Блок] Выборка: текст ошибки СУБД, под ней свёрнутая группа с полным текстом запроса и стек-трейсом. Стек-трейс передаётся клиенту только при development.stackTraces.visibleInGui="true" в global3.config.xml; при выключенной настройке в группе остаётся текст запроса и текст ошибки без стека.

  • Ошибка операции: красная строка Error: Выборка -> Операция [N ms]: сообщение.

7.2.4. Как ориентироваться в логе

  • Сообщения уровней TRACE и DEBUG выводятся через console.debug — в Chrome и Edge они скрыты фильтром уровней по умолчанию. Чтобы видеть их, включите уровень Verbose в фильтре консоли DevTools. Группы, запросы и ошибки видны при любом фильтре.

  • Ход сценария читается по группам OPER: разверните операцию, чтобы увидеть её SQL-пачки и вложенные операции; длительности в закрывающих сообщениях помогают найти медленный шаг.

  • Поиск DevTools (Ctrl+F в консоли) работает по заголовкам групп: ищите по короткому имени выборки, имени операции или фрагменту SQL.

  • Смена уровня любого канала закрывает открытые группы — после переключения тумблеров дерево консоли не «съезжает».

  • Те же события уходят в SSH-лог сессии и серверные логи в плоском серверном формате (с полными именами и таймстампами) — консоль браузера их дублирует, а не заменяет.