ÿØÿà JPEG ÿþ;
| Server IP : 68.65.120.201 / Your IP : 216.73.216.126 Web Server : LiteSpeed System : Linux server179.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64 User : taxhyuvu ( 2294) PHP Version : 8.1.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /opt/hc_python/lib64/python3.12/site-packages/sentry_sdk/ |
Upload File : |
# NOTE: this is the logger sentry exposes to users, not some generic logger.
import functools
import time
from typing import Any
from sentry_sdk import get_client
from sentry_sdk.utils import safe_repr, capture_internal_exceptions
OTEL_RANGES = [
# ((severity level range), severity text)
# https://opentelemetry.io/docs/specs/otel/logs/data-model
((1, 4), "trace"),
((5, 8), "debug"),
((9, 12), "info"),
((13, 16), "warn"),
((17, 20), "error"),
((21, 24), "fatal"),
]
class _dict_default_key(dict): # type: ignore[type-arg]
"""dict that returns the key if missing."""
def __missing__(self, key):
# type: (str) -> str
return "{" + key + "}"
def _capture_log(severity_text, severity_number, template, **kwargs):
# type: (str, int, str, **Any) -> None
client = get_client()
body = template
attrs = {} # type: dict[str, str | bool | float | int]
if "attributes" in kwargs:
attrs.update(kwargs.pop("attributes"))
for k, v in kwargs.items():
attrs[f"sentry.message.parameter.{k}"] = v
if kwargs:
# only attach template if there are parameters
attrs["sentry.message.template"] = template
with capture_internal_exceptions():
body = template.format_map(_dict_default_key(kwargs))
attrs = {
k: (
v
if (
isinstance(v, str)
or isinstance(v, int)
or isinstance(v, bool)
or isinstance(v, float)
)
else safe_repr(v)
)
for (k, v) in attrs.items()
}
# noinspection PyProtectedMember
client._capture_log(
{
"severity_text": severity_text,
"severity_number": severity_number,
"attributes": attrs,
"body": body,
"time_unix_nano": time.time_ns(),
"trace_id": None,
},
)
trace = functools.partial(_capture_log, "trace", 1)
debug = functools.partial(_capture_log, "debug", 5)
info = functools.partial(_capture_log, "info", 9)
warning = functools.partial(_capture_log, "warn", 13)
error = functools.partial(_capture_log, "error", 17)
fatal = functools.partial(_capture_log, "fatal", 21)
def _otel_severity_text(otel_severity_number):
# type: (int) -> str
for (lower, upper), severity in OTEL_RANGES:
if lower <= otel_severity_number <= upper:
return severity
return "default"
def _log_level_to_otel(level, mapping):
# type: (int, dict[Any, int]) -> tuple[int, str]
for py_level, otel_severity_number in sorted(mapping.items(), reverse=True):
if level >= py_level:
return otel_severity_number, _otel_severity_text(otel_severity_number)
return 0, "default"