Перейти к основному содержанию
`Ctrl`+`K`

# Логирование

При необходимости логирования в базу данных, необходимо обеспечить:

- независимость от основной ветки изменения данных;

- высокую отказоустойчивость;

- низкую нагрузку на сервер/базу данных.

Для реализации такого логирования существует специальный инструмент – логирующая транзакция.

Данный инструмент позволяет выделить запись логов в отдельную сессию. Для уменьшения количества обращений к базе производите сброс данных из логирующей транзакции в базу не чаще, чем раз в 1000 update/insert.

Пример:

    val logTransaction = new LogTransaction() {
      override protected def run(): Unit = {
        Rpl_IntImportLogApi().setsError(Rpl_IntImportLogApi().load(idp),value)
        commitByInterval()
      }
    }

    logTransaction.execute()

Более подробно примеры использования можно посмотреть в модуле интеграции Rpl `ru.bitec.app.rpl.channel.intg.in.Rpl_IntImportLogApi` – методы с постфиксом `LT`.

При выполнении `.execute()` сервер производит попытку найти логирующую сессию, если она уже была инициирована. Если не была – выделяется новая. Внутри блока `LogTransaction()` `implicit session` является логирующая сессия и все действия производимые с использованием `logSession` относятся к ней.

В `LogSession` происходит `commit`:

- При освобождении `LogSession`
  `LogSession` освобождается на `endWork`.

Смотрите также методы основной сессии:

- `beginWork`;

- `endWork`.