ОтелПакетныйПроцессорЛогов
Пакетный процессор записей логов (BatchLogRecordProcessor) по спецификации OpenTelemetry.
Описание
Буферизует записи лога и отправляет их экспортеру асинхронно, партиями. Thin facade — вся логика буферизации реализована в ОтелБазовыйПакетныйПроцессор.
Реализует ИнтерфейсПроцессорЛогов.
Важно: Процессор хранит переданный объект
ОтелЗаписьЛогаas-is и обрабатывает его асинхронно. Если вызывающая сторона продолжает модифицировать запись послеПриПоявлении()— возможны гонки данных. Передавайте клон или не модифицируйте запись после передачи.
Создание
Конструктор без параметров. Процессор собирается через ПостроительНаследника из ОтелБазовыйПакетныйПроцессор, которому передаются настройки:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Экспортер | Произвольный | — | Экспортер логов |
ИмяСигнала | Строка | — | Имя сигнала для лога: "logs" |
МаксРазмерБуфера | Число | 2048 | Максимальный размер очереди |
МаксРазмерПакета | Число | 512 | Максимальный размер пакета; размер больше размера очереди ограничивается размером очереди |
ИнтервалЭкспортаМс | Число | 1000 | Интервал фонового экспорта в миллисекундах (значение по умолчанию спецификации для логов) |
ТаймаутЭкспортаМс | Число | 30000 | Таймаут экспорта в миллисекундах |
Записи экспортирует фоновое задание: оно запускается с первой записью и отправляет пакет, как только накопился полный пакет или истёк интервал экспорта. ПриПоявлении не ждёт отправку даже при заполнении пакета. ЗапуститьФоновыйЭкспорт() запускает задание заранее; вызывать его не обязательно.
Запись, пришедшая в полную очередь, отбрасывается. При извлечении следующего пакета в лог oscript.lib.opentelemetry.logs пишется предупреждение с числом записей, отброшенных с прошлого пакета.
Методы
ПриПоявлении
Добавляет запись лога в буфер (OnEmit) и возвращается, не дожидаясь экспорта. Буфер обрабатывается фоновым заданием.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ЗаписьЛога | ОтелЗаписьЛога | — | Запись лога (не должна модифицироваться после передачи) |
Контекст | Соответствие, Неопределено | Неопределено | Разрешённый контекст |
Включен
Проверяет, будет ли процессор обрабатывать запись. Всегда возвращает Истина. Реализация не мутирует переданные объекты.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Контекст | Соответствие, Неопределено | Неопределено | Явный контекст |
ОбластьИнструментирования | ОтелОбластьИнструментирования | Неопределено | Scope логгера |
СтепеньСерьезности | Число | 0 | Номер серьезности |
ИмяСобытия | Строка | "" | Имя события |
Возвращает: Булево
СброситьБуфер
Принудительно экспортирует все записи из буфера.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 0 | Таймаут в миллисекундах (0 — без ограничения) |
Возвращает: ОтелРезультатЭкспорта — ошибка, если экспорт пакета не удался; таймаут при истечении срока
Закрыть
Завершает работу процессора: останавливает фоновый экспорт, экспортирует оставшиеся в буфере записи и закрывает экспортер. Все три шага укладываются в один общий срок; экспортер закрывается и после сбоя или таймаута финального экспорта. После вызова ПриПоявлении игнорирует новые записи; повторный вызов возвращает ошибку «Процессор закрыт».
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 30000 | Таймаут в миллисекундах (0 — без ограничения) |
Возвращает: ОтелРезультатЗакрытия — ошибка финального экспорта или закрытия экспортера; иначе таймаут, если истёк срок; иначе успех
Пример
Экспортер = Новый ОтелЭкспортерЛогов(Новый ОтелHttpТранспорт("http://localhost:4318"));
Базовый = Новый ОтелБазовыйПакетныйПроцессор(Экспортер, "logs", 2048, 512, 1000);
Процессор = Новый ПостроительНаследника(Новый ОтелПакетныйПроцессорЛогов(), Базовый).Построить();
Процессор.ЗапуститьФоновыйЭкспорт();
Провайдер = Новый ОтелПостроительПровайдераЛогирования()
.УстановитьРесурс(Ресурс)
.ДобавитьПроцессор(Процессор)
.Построить();