Skip to content

ОтелПакетныйПроцессорЛогов ​

Пакетный процессор записей логов (BatchLogRecordProcessor) по спецификации OpenTelemetry.

Описание ​

Буферизует записи лога и отправляет их экспортеру асинхронно, партиями. Thin facade — вся логика буферизации реализована в ОтелБазовыйПакетныйПроцессор.

Реализует ИнтерфейсПроцессорЛогов.

Важно: Процессор хранит переданный объект ОтелЗаписьЛога as-is и обрабатывает его асинхронно. Если вызывающая сторона продолжает модифицировать запись после ПриПоявлении() — возможны гонки данных. Передавайте клон или не модифицируйте запись после передачи.

Создание ​

Конструктор без параметров. Процессор собирается через ПостроительНаследника из ОтелБазовыйПакетныйПроцессор, которому передаются настройки:

ПараметрТипПо умолчаниюОписание
ЭкспортерПроизвольный—Экспортер логов
ИмяСигналаСтрока—Имя сигнала для лога: "logs"
МаксРазмерБуфераЧисло2048Максимальный размер очереди
МаксРазмерПакетаЧисло512Максимальный размер пакета; размер больше размера очереди ограничивается размером очереди
ИнтервалЭкспортаМсЧисло1000Интервал фонового экспорта в миллисекундах (значение по умолчанию спецификации для логов)
ТаймаутЭкспортаМсЧисло30000Таймаут экспорта в миллисекундах

Записи экспортирует фоновое задание: оно запускается с первой записью и отправляет пакет, как только накопился полный пакет или истёк интервал экспорта. ПриПоявлении не ждёт отправку даже при заполнении пакета. ЗапуститьФоновыйЭкспорт() запускает задание заранее; вызывать его не обязательно.

Запись, пришедшая в полную очередь, отбрасывается. При извлечении следующего пакета в лог oscript.lib.opentelemetry.logs пишется предупреждение с числом записей, отброшенных с прошлого пакета.

Методы ​

ПриПоявлении ​

Добавляет запись лога в буфер (OnEmit) и возвращается, не дожидаясь экспорта. Буфер обрабатывается фоновым заданием.

ПараметрТипПо умолчаниюОписание
ЗаписьЛогаОтелЗаписьЛога—Запись лога (не должна модифицироваться после передачи)
КонтекстСоответствие, НеопределеноНеопределеноРазрешённый контекст

Включен ​

Проверяет, будет ли процессор обрабатывать запись. Всегда возвращает Истина. Реализация не мутирует переданные объекты.

ПараметрТипПо умолчаниюОписание
КонтекстСоответствие, НеопределеноНеопределеноЯвный контекст
ОбластьИнструментированияОтелОбластьИнструментированияНеопределеноScope логгера
СтепеньСерьезностиЧисло0Номер серьезности
ИмяСобытияСтрока""Имя события

Возвращает: Булево


СброситьБуфер ​

Принудительно экспортирует все записи из буфера.

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло0Таймаут в миллисекундах (0 — без ограничения)

Возвращает: ОтелРезультатЭкспорта — ошибка, если экспорт пакета не удался; таймаут при истечении срока


Закрыть ​

Завершает работу процессора: останавливает фоновый экспорт, экспортирует оставшиеся в буфере записи и закрывает экспортер. Все три шага укладываются в один общий срок; экспортер закрывается и после сбоя или таймаута финального экспорта. После вызова ПриПоявлении игнорирует новые записи; повторный вызов возвращает ошибку «Процессор закрыт».

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло30000Таймаут в миллисекундах (0 — без ограничения)

Возвращает: ОтелРезультатЗакрытия — ошибка финального экспорта или закрытия экспортера; иначе таймаут, если истёк срок; иначе успех

Пример ​

bsl
Экспортер = Новый ОтелЭкспортерЛогов(Новый ОтелHttpТранспорт("http://localhost:4318"));

Базовый = Новый ОтелБазовыйПакетныйПроцессор(Экспортер, "logs", 2048, 512, 1000);
Процессор = Новый ПостроительНаследника(Новый ОтелПакетныйПроцессорЛогов(), Базовый).Построить();
Процессор.ЗапуститьФоновыйЭкспорт();

Провайдер = Новый ОтелПостроительПровайдераЛогирования()
    .УстановитьРесурс(Ресурс)
    .ДобавитьПроцессор(Процессор)
    .Построить();