11# frozen_string_literal: true
22
33module Sentry
4+ # The StructuredLogger class implements Sentry's SDK telemetry logs protocol.
5+ # It provides methods for logging messages at different severity levels and
6+ # sending them to Sentry with structured data.
7+ #
8+ # This class follows the Sentry Logs Protocol as defined in:
9+ # https://develop.sentry.dev/sdk/telemetry/logs/
10+ #
11+ # @example Basic usage
12+ # Sentry.logger.info("User logged in", user_id: 123)
13+ #
14+ # @example With structured data
15+ # Sentry.logger.warn("API request failed",
16+ # status_code: 404,
17+ # endpoint: "/api/users",
18+ # request_id: "abc-123"
19+ # )
20+ #
21+ # @see https://develop.sentry.dev/sdk/telemetry/logs/ Sentry SDK Telemetry Logs Protocol
422 class StructuredLogger
5- # https://develop.sentry.dev/sdk/telemetry/logs/#log-severity-number
23+ # Severity number mapping for log levels according to the Sentry Logs Protocol
24+ # @see https://develop.sentry.dev/sdk/telemetry/logs/#log-severity-number
625 LEVELS = {
726 "trace" => 1 ,
827 "debug" => 5 ,
@@ -12,36 +31,68 @@ class StructuredLogger
1231 "fatal" => 21
1332 } . freeze
1433
34+ # @return [Configuration] The Sentry configuration
1535 attr_reader :config
1636
37+ # Initializes a new StructuredLogger instance
38+ # @param config [Configuration] The Sentry configuration
1739 def initialize ( config )
1840 @config = config
1941 end
2042
43+ # Logs a message at TRACE level
44+ # @param message [String] The log message
45+ # @param payload [Hash] Additional attributes to include with the log
46+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
2147 def trace ( message , payload = { } )
2248 log ( :trace , message , payload )
2349 end
2450
51+ # Logs a message at DEBUG level
52+ # @param message [String] The log message
53+ # @param payload [Hash] Additional attributes to include with the log
54+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
2555 def debug ( message , payload = { } )
2656 log ( :debug , message , payload )
2757 end
2858
59+ # Logs a message at INFO level
60+ # @param message [String] The log message
61+ # @param payload [Hash] Additional attributes to include with the log
62+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
2963 def info ( message , payload = { } )
3064 log ( :info , message , payload )
3165 end
3266
67+ # Logs a message at WARN level
68+ # @param message [String] The log message
69+ # @param payload [Hash] Additional attributes to include with the log
70+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
3371 def warn ( message , payload = { } )
3472 log ( :warn , message , payload )
3573 end
3674
75+ # Logs a message at ERROR level
76+ # @param message [String] The log message
77+ # @param payload [Hash] Additional attributes to include with the log
78+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
3779 def error ( message , payload = { } )
3880 log ( :error , message , payload )
3981 end
4082
83+ # Logs a message at FATAL level
84+ # @param message [String] The log message
85+ # @param payload [Hash] Additional attributes to include with the log
86+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
4187 def fatal ( message , payload = { } )
4288 log ( :fatal , message , payload )
4389 end
4490
91+ # Logs a message at the specified level
92+ # @param level [Symbol] The log level (:trace, :debug, :info, :warn, :error, :fatal)
93+ # @param message [String] The log message
94+ # @param payload [Hash] Additional attributes to include with the log
95+ # @return [LogEvent, nil] The created log event or nil if logging is disabled
4596 def log ( level , message , payload )
4697 Sentry . capture_log ( message , level : level , severity : LEVELS [ level ] , **payload )
4798 end
0 commit comments