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

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

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

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

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

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

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