Skip to content

Commit 3824524

Browse files
committed
.
1 parent 1be8d9a commit 3824524

File tree

1 file changed

+50
-2
lines changed

1 file changed

+50
-2
lines changed

sentry_sdk/integrations/loguru.py

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import enum
22

3+
import sentry_sdk
34
from sentry_sdk.integrations import Integration, DidNotEnable
45
from sentry_sdk.integrations.logging import (
56
BreadcrumbHandler,
67
EventHandler,
78
SentryLogsHandler,
89
_BaseHandler,
10+
_python_level_to_otel,
911
)
1012

1113
from typing import TYPE_CHECKING
@@ -124,8 +126,54 @@ class LoguruBreadcrumbHandler(_LoguruBaseHandler, BreadcrumbHandler):
124126
pass
125127

126128

127-
class LoguruSentryLogsHandler(_LoguruBaseHandler, SentryLogsHandler):
129+
def _loguru_level_to_otel(record_level):
130+
# type: (int) -> Tuple[int, str]
131+
for py_level, otel_severity_number, otel_severity_text in [
132+
(50, 21, "fatal"),
133+
(40, 17, "error"),
134+
(30, 13, "warn"),
135+
(25, 11, "info"), # Loguru's success
136+
(20, 9, "info"),
137+
(10, 5, "debug"),
138+
(5, 1, "trace"),
139+
]:
140+
if record_level >= py_level:
141+
return otel_severity_number, otel_severity_text
142+
return 0, "default"
143+
144+
145+
class LoguruSentryLogsHandler(_LoguruBaseHandler):
128146
"""Modified version of :class:`sentry_sdk.integrations.logging.SentryLogsHandler` to use loguru's level names."""
147+
def emit(self, record):
148+
client = sentry_sdk.get_client()
149+
150+
if not client.is_active():
151+
return
152+
153+
if not client.options["_experiments"].get("enable_logs", False):
154+
return
155+
156+
print('rec', record)
157+
print('strofrec', str(record))
158+
159+
self._capture_log_from_record(client, record)
160+
129161
def _capture_log_from_record(self, client, record):
130162
# type: (BaseClient, LogRecord)
131-
return super()._capture_log_from_record(client, record)
163+
scope = sentry_sdk.get_current_scope()
164+
165+
otel_severity_number, otel_severity_text = _python_level_to_otel(record.levelno)
166+
167+
attrs = {}
168+
169+
client._capture_experimental_log(
170+
scope,
171+
{
172+
"severity_text": otel_severity_text,
173+
"severity_number": otel_severity_number,
174+
"body": record.msg,
175+
"attributes": attrs,
176+
"time_unix_nano": int(record.created * 1e9),
177+
"trace_id": None,
178+
},
179+
)

0 commit comments

Comments
 (0)