[feat] add otel adapters

This commit is contained in:
Azamat 2026-03-20 13:38:57 +03:00
parent 1588efb9ca
commit 96af9c08f5
10 changed files with 321 additions and 8 deletions

57
adapter/otel/logging.py Normal file
View file

@ -0,0 +1,57 @@
from opentelemetry._logs import Logger as OtelApiLogger
from opentelemetry._logs import SeverityNumber
from usecase.interface import Attrs
_LEVELS = {
'DEBUG': 10,
'INFO': 20,
'WARN': 30,
'WARNING': 30,
'ERROR': 40,
'FATAL': 50,
'CRITICAL': 50,
}
class OtelLogger:
def __init__(self, logger: OtelApiLogger, level: str) -> None:
self._logger = logger
self._threshold = _log_level_value(level)
def debug(self, message: str, attrs: Attrs | None = None) -> None:
self._emit('DEBUG', SeverityNumber.DEBUG, _LEVELS['DEBUG'], message, attrs)
def info(self, message: str, attrs: Attrs | None = None) -> None:
self._emit('INFO', SeverityNumber.INFO, _LEVELS['INFO'], message, attrs)
def warning(self, message: str, attrs: Attrs | None = None) -> None:
self._emit('WARN', SeverityNumber.WARN, _LEVELS['WARNING'], message, attrs)
def error(self, message: str, attrs: Attrs | None = None) -> None:
self._emit('ERROR', SeverityNumber.ERROR, _LEVELS['ERROR'], message, attrs)
def _emit(
self,
severity_text: str,
severity_number: SeverityNumber,
level: int,
message: str,
attrs: Attrs | None,
) -> None:
if level < self._threshold:
return
self._logger.emit(
severity_text=severity_text,
severity_number=severity_number,
body=message,
attributes=None if attrs is None else dict(attrs),
)
def _log_level_value(level: str) -> int:
normalized = level.strip().upper()
if normalized not in _LEVELS:
raise ValueError('invalid log level')
return _LEVELS[normalized]