.. _gs3_client_logging: Логирование в консоль браузера ============================== Инструмент разработчика, транслирующий серверные логи пользовательской сессии в консоль DevTools браузера. Сообщения группируются в сворачиваемые блоки по операциям и SQL-запросам, поэтому ход выполнения читается как дерево, а не плоский поток. Окно «Настройки логирования» ---------------------------- Окно открывается кнопкой настроек логирования в правой части главного меню приложения. Компоновка ~~~~~~~~~~ Каналы логирования расположены колонками. Каждая колонка содержит тумблер канала и выпадающий список уровня под ним. Канал «Скрипт» показывается только в :term:`Oracle решении`: в :term:`PostgreSql решении` он вывода не даёт, поэтому колонка не создаётся. .. list-table:: Каналы логирования :header-rows: 1 :widths: 15 30 55 * - Канал - Серверные логгеры - Что логируется * - Операции - ``ru.bitec.engine.model.operation`` - Выполнение операций выборок: сворачиваемая группа на каждую операцию, длительность в закрывающем сообщении, ошибки выполнения. * - SQL - ``jdbc.sqltiming`` - Текст SQL-запросов с подставленными значениями параметров и временем выполнения, сгруппированный в пачки по выборкам и категориям. * - Скрипт - ``ru.bitec.engine.script`` - Паскаль-скриптер (:term:`Oracle решение`): на ``TRACE`` — вызовы встроенных функций скриптера с аргументами (``call: ExecSQL``, ``call: DoLookup``, ``call: SetVar`` и т.д.), на ``WARN``/``ERROR`` — сбои среды выполнения. Прикладной код :term:`PostgreSql решения` этим каналом не покрывается: Scala пишет в ``ru.bitec.app``, а Jexl-скрипты выполняются в ``ru.bitec.gtk.sys.jexl``. Поэтому в PostgreSql решении канал не показывается. Поведение ~~~~~~~~~ * Включение тумблера применяет к каналу уровень, выбранный в списке под ним; выключение переводит канал в ``OFF``. * Список уровня доступен только при включённом тумблере; выбор уровня применяется сразу. * Набор уровней у каждого канала свой — уровни, не дающие полезного вывода, исключены: Операции — ``TRACE`` и ``DEBUG``, SQL — ``TRACE``, ``DEBUG`` и ``INFO``, Скрипт — все уровни. Что отображается на каждом уровне — в разделе «Уровни каналов». * При открытии окно показывает фактические уровни каналов текущей сессии, поэтому состояние тумблеров переживает повторное открытие окна. Если уровень канала на сервере не входит в список (например, задан конфигурацией), канал полезного вывода не даёт: тумблер показан выключенным, а список — уровнем включения по умолчанию. * Уровни действуют в пределах сессии. Начальные значения задаются элементом ``clientLog`` файла ``global3.config.xml`` (``operationLevel``, ``sqlLevel``, ``scriptLevel``), по умолчанию все каналы выключены. * Переключение каналов на серверный лог не влияет: уровни, заданные конфигурацией logback, сохраняются, канал лишь добавляет к ним подробности, которых требует консоль браузера. .. note:: При переподключении сессии (обрыв соединения) уровни каналов сбрасываются к значениям конфигурации. Уровни каналов ~~~~~~~~~~~~~~ По умолчанию все каналы выключены (``OFF``). Уровень, который тумблер ставит при включении, — рабочий уровень канала: Операции — ``DEBUG``, SQL — ``INFO``, Скрипт — ``TRACE``. Если нет особой задачи, пользоваться стоит именно ими. .. list-table:: Что отображается на каждом уровне :header-rows: 1 :widths: 12 16 72 * - Канал - Уровень - Что отображается * - Операции - ``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`` нет, поэтому уровни ``INFO``–``ERROR`` из его списка исключены — канал на них молчал бы. Сообщения уровней ``TRACE`` и ``DEBUG`` выводятся через ``console.debug`` и по умолчанию скрыты фильтром уровней DevTools — включите **Verbose** (см. «Как ориентироваться в логе»). Структура лога -------------- Вложенность передаётся сворачиваемыми группами консоли, вид узла — цветным бейджем в начале заголовка: .. list-table:: Бейджи :header-rows: 1 :widths: 12 88 * - Бейдж - Значение * - ``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. Ошибки ------ Ошибки не прячутся в свёрнутых группах: любое событие уровня ``ERROR`` сначала закрывает все открытые группы и выводится в корень консоли красной строкой. Закрываются в том числе группы родительских операций: если ошибка произошла во вложенной операции, закрывающие сообщения ``Executed: …`` внешних операций выводятся уже в корень консоли, после ошибки — это ожидаемое поведение, а не сбой вложенности. * Упавший SQL-запрос: красная строка ``SQL [Блок] Выборка: текст ошибки СУБД``, под ней свёрнутая группа с полным текстом запроса и стек-трейсом. Стек-трейс передаётся клиенту только при ``development.stackTraces.visibleInGui="true"`` в ``global3.config.xml``; при выключенной настройке в группе остаётся текст запроса и текст ошибки без стека. * Ошибка операции: красная строка ``Error: Выборка -> Операция [N ms]: сообщение``. Как ориентироваться в логе -------------------------- * Сообщения уровней ``TRACE`` и ``DEBUG`` выводятся через ``console.debug`` — в Chrome и Edge они скрыты фильтром уровней по умолчанию. Чтобы видеть их, включите уровень **Verbose** в фильтре консоли DevTools. Группы, запросы и ошибки видны при любом фильтре. * Ход сценария читается по группам ``OPER``: разверните операцию, чтобы увидеть её SQL-пачки и вложенные операции; длительности в закрывающих сообщениях помогают найти медленный шаг. * Поиск DevTools (Ctrl+F в консоли) работает по заголовкам групп: ищите по короткому имени выборки, имени операции или фрагменту SQL. * Смена уровня любого канала закрывает открытые группы — после переключения тумблеров дерево консоли не «съезжает». * Те же события уходят в SSH-лог сессии и серверные логи в плоском серверном формате (с полными именами и таймстампами) — консоль браузера их дублирует, а не заменяет.