diff --git a/logging_loki/emitter.py b/logging_loki/emitter.py index 586c0a1..978559d 100644 --- a/logging_loki/emitter.py +++ b/logging_loki/emitter.py @@ -3,6 +3,7 @@ import abc import copy import functools +import json import logging import threading import time @@ -31,7 +32,7 @@ class LokiEmitter(abc.ABC): label_replace_with = const.label_replace_with session_class = requests.Session - def __init__(self, url: str, tags: Optional[dict] = None, headers: Optional[dict] = None, auth: BasicAuth = None): + def __init__(self, url: str, tags: Optional[dict] = None, headers: Optional[dict] = None, auth: BasicAuth = None, as_json: bool = False): """ Create new Loki emitter. @@ -49,6 +50,8 @@ def __init__(self, url: str, tags: Optional[dict] = None, headers: Optional[dict self.url = url #: Optional tuple with username and password for basic authentication. self.auth = auth + #: Optional bool, send record as json? + self.as_json = as_json self._session: Optional[requests.Session] = None self._lock = threading.Lock() @@ -146,6 +149,9 @@ def build_payload(self, record: logging.LogRecord, line) -> dict: labels = self.build_tags(record) ns = 1e9 ts = str(int(time.time() * ns)) + + line = json.dumps(record, default=lambda obj: obj.__dict__) if self.as_json else line + stream = { "stream": labels, "values": [[ts, line]], diff --git a/logging_loki/handlers.py b/logging_loki/handlers.py index 0f7d1da..79bcffa 100644 --- a/logging_loki/handlers.py +++ b/logging_loki/handlers.py @@ -43,6 +43,7 @@ def __init__( headers: Optional[dict] = None, auth: Optional[emitter.BasicAuth] = None, version: Optional[str] = None, + as_json: Optional[bool] = False ): """ Create new Loki logging handler. @@ -68,7 +69,7 @@ def __init__( version = version or const.emitter_ver if version not in self.emitters: raise ValueError("Unknown emitter version: {0}".format(version)) - self.emitter = self.emitters[version](url, tags, headers, auth) + self.emitter = self.emitters[version](url, tags, headers, auth, as_json) def handleError(self, record): # noqa: N802 """Close emitter and let default handler take actions on error."""