X7ROOT File Manager
Current Path:
/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/integrations
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
sentry_sdk
/
integrations
/
??
..
??
__init__.py
(12.44 KB)
??
__pycache__
??
_asgi_common.py
(3.11 KB)
??
_wsgi_common.py
(7.38 KB)
??
aiohttp.py
(12.7 KB)
??
anthropic.py
(14.17 KB)
??
argv.py
(911 B)
??
ariadne.py
(5.7 KB)
??
arq.py
(7.7 KB)
??
asgi.py
(12.5 KB)
??
asyncio.py
(4.5 KB)
??
asyncpg.py
(6.37 KB)
??
atexit.py
(1.61 KB)
??
aws_lambda.py
(17.65 KB)
??
beam.py
(5.06 KB)
??
boto3.py
(4.31 KB)
??
bottle.py
(6.46 KB)
??
celery
??
chalice.py
(4.59 KB)
??
clickhouse_driver.py
(5.96 KB)
??
cloud_resource_context.py
(7.6 KB)
??
cohere.py
(9.18 KB)
??
dedupe.py
(1.93 KB)
??
django
??
dramatiq.py
(7.28 KB)
??
excepthook.py
(2.35 KB)
??
executing.py
(1.95 KB)
??
falcon.py
(9.28 KB)
??
fastapi.py
(4.48 KB)
??
flask.py
(8.54 KB)
??
gcp.py
(8.26 KB)
??
gnu_backtrace.py
(2.75 KB)
??
google_genai
??
gql.py
(4.69 KB)
??
graphene.py
(4.92 KB)
??
grpc
??
httpx.py
(5.94 KB)
??
huey.py
(5.32 KB)
??
huggingface_hub.py
(14.6 KB)
??
langchain.py
(39.02 KB)
??
langgraph.py
(11.56 KB)
??
launchdarkly.py
(1.89 KB)
??
litellm.py
(9.99 KB)
??
litestar.py
(11.55 KB)
??
logging.py
(13.57 KB)
??
loguru.py
(6.38 KB)
??
mcp.py
(19.58 KB)
??
modules.py
(820 B)
??
openai.py
(24.54 KB)
??
openai_agents
??
openfeature.py
(1.1 KB)
??
opentelemetry
??
otlp.py
(3.06 KB)
??
pure_eval.py
(4.5 KB)
??
pydantic_ai
??
pymongo.py
(6.23 KB)
??
pyramid.py
(7.19 KB)
??
quart.py
(7.24 KB)
??
ray.py
(5.2 KB)
??
redis
??
rq.py
(5.18 KB)
??
rust_tracing.py
(8.87 KB)
??
sanic.py
(12.66 KB)
??
serverless.py
(1.76 KB)
??
socket.py
(3.09 KB)
??
spark
??
sqlalchemy.py
(4.24 KB)
??
starlette.py
(25.62 KB)
??
starlite.py
(10.31 KB)
??
statsig.py
(1.2 KB)
??
stdlib.py
(8.76 KB)
??
strawberry.py
(13.82 KB)
??
sys_exit.py
(2.43 KB)
??
threading.py
(6.94 KB)
??
tornado.py
(7.04 KB)
??
trytond.py
(1.61 KB)
??
typer.py
(1.77 KB)
??
unleash.py
(1.03 KB)
??
unraisablehook.py
(1.71 KB)
??
wsgi.py
(10.56 KB)
Editing: loguru.py
import enum import sentry_sdk from sentry_sdk.integrations import Integration, DidNotEnable from sentry_sdk.integrations.logging import ( BreadcrumbHandler, EventHandler, _BaseHandler, ) from sentry_sdk.logger import _log_level_to_otel from sentry_sdk.utils import has_logs_enabled, safe_repr from typing import TYPE_CHECKING if TYPE_CHECKING: from logging import LogRecord from typing import Any, Optional try: import loguru from loguru import logger from loguru._defaults import LOGURU_FORMAT as DEFAULT_FORMAT if TYPE_CHECKING: from loguru import Message except ImportError: raise DidNotEnable("LOGURU is not installed") class LoggingLevels(enum.IntEnum): TRACE = 5 DEBUG = 10 INFO = 20 SUCCESS = 25 WARNING = 30 ERROR = 40 CRITICAL = 50 DEFAULT_LEVEL = LoggingLevels.INFO.value DEFAULT_EVENT_LEVEL = LoggingLevels.ERROR.value SENTRY_LEVEL_FROM_LOGURU_LEVEL = { "TRACE": "DEBUG", "DEBUG": "DEBUG", "INFO": "INFO", "SUCCESS": "INFO", "WARNING": "WARNING", "ERROR": "ERROR", "CRITICAL": "CRITICAL", } # Map Loguru level numbers to corresponding OTel level numbers SEVERITY_TO_OTEL_SEVERITY = { LoggingLevels.CRITICAL: 21, # fatal LoggingLevels.ERROR: 17, # error LoggingLevels.WARNING: 13, # warn LoggingLevels.SUCCESS: 11, # info LoggingLevels.INFO: 9, # info LoggingLevels.DEBUG: 5, # debug LoggingLevels.TRACE: 1, # trace } class LoguruIntegration(Integration): identifier = "loguru" level = DEFAULT_LEVEL # type: Optional[int] event_level = DEFAULT_EVENT_LEVEL # type: Optional[int] breadcrumb_format = DEFAULT_FORMAT event_format = DEFAULT_FORMAT sentry_logs_level = DEFAULT_LEVEL # type: Optional[int] def __init__( self, level=DEFAULT_LEVEL, event_level=DEFAULT_EVENT_LEVEL, breadcrumb_format=DEFAULT_FORMAT, event_format=DEFAULT_FORMAT, sentry_logs_level=DEFAULT_LEVEL, ): # type: (Optional[int], Optional[int], str | loguru.FormatFunction, str | loguru.FormatFunction, Optional[int]) -> None LoguruIntegration.level = level LoguruIntegration.event_level = event_level LoguruIntegration.breadcrumb_format = breadcrumb_format LoguruIntegration.event_format = event_format LoguruIntegration.sentry_logs_level = sentry_logs_level @staticmethod def setup_once(): # type: () -> None if LoguruIntegration.level is not None: logger.add( LoguruBreadcrumbHandler(level=LoguruIntegration.level), level=LoguruIntegration.level, format=LoguruIntegration.breadcrumb_format, ) if LoguruIntegration.event_level is not None: logger.add( LoguruEventHandler(level=LoguruIntegration.event_level), level=LoguruIntegration.event_level, format=LoguruIntegration.event_format, ) if LoguruIntegration.sentry_logs_level is not None: logger.add( loguru_sentry_logs_handler, level=LoguruIntegration.sentry_logs_level, ) class _LoguruBaseHandler(_BaseHandler): def __init__(self, *args, **kwargs): # type: (*Any, **Any) -> None if kwargs.get("level"): kwargs["level"] = SENTRY_LEVEL_FROM_LOGURU_LEVEL.get( kwargs.get("level", ""), DEFAULT_LEVEL ) super().__init__(*args, **kwargs) def _logging_to_event_level(self, record): # type: (LogRecord) -> str try: return SENTRY_LEVEL_FROM_LOGURU_LEVEL[ LoggingLevels(record.levelno).name ].lower() except (ValueError, KeyError): return record.levelname.lower() if record.levelname else "" class LoguruEventHandler(_LoguruBaseHandler, EventHandler): """Modified version of :class:`sentry_sdk.integrations.logging.EventHandler` to use loguru's level names.""" pass class LoguruBreadcrumbHandler(_LoguruBaseHandler, BreadcrumbHandler): """Modified version of :class:`sentry_sdk.integrations.logging.BreadcrumbHandler` to use loguru's level names.""" pass def loguru_sentry_logs_handler(message): # type: (Message) -> None # This is intentionally a callable sink instead of a standard logging handler # since otherwise we wouldn't get direct access to message.record client = sentry_sdk.get_client() if not client.is_active(): return if not has_logs_enabled(client.options): return record = message.record if ( LoguruIntegration.sentry_logs_level is None or record["level"].no < LoguruIntegration.sentry_logs_level ): return otel_severity_number, otel_severity_text = _log_level_to_otel( record["level"].no, SEVERITY_TO_OTEL_SEVERITY ) attrs = {"sentry.origin": "auto.log.loguru"} # type: dict[str, Any] project_root = client.options["project_root"] if record.get("file"): if project_root is not None and record["file"].path.startswith(project_root): attrs["code.file.path"] = record["file"].path[len(project_root) + 1 :] else: attrs["code.file.path"] = record["file"].path if record.get("line") is not None: attrs["code.line.number"] = record["line"] if record.get("function"): attrs["code.function.name"] = record["function"] if record.get("thread"): attrs["thread.name"] = record["thread"].name attrs["thread.id"] = record["thread"].id if record.get("process"): attrs["process.pid"] = record["process"].id attrs["process.executable.name"] = record["process"].name if record.get("name"): attrs["logger.name"] = record["name"] extra = record.get("extra") if isinstance(extra, dict): for key, value in extra.items(): if isinstance(value, (str, int, float, bool)): attrs[f"sentry.message.parameter.{key}"] = value else: attrs[f"sentry.message.parameter.{key}"] = safe_repr(value) client._capture_log( { "severity_text": otel_severity_text, "severity_number": otel_severity_number, "body": record["message"], "attributes": attrs, "time_unix_nano": int(record["time"].timestamp() * 1e9), "trace_id": None, } )
Upload File
Create Folder