Class: A2A::Monitoring::StructuredLogger
- Inherits:
-
Object
- Object
- A2A::Monitoring::StructuredLogger
- Defined in:
- lib/a2a/monitoring.rb
Overview
Structured logger with correlation ID support
Instance Method Summary collapse
-
#clear_correlation_id ⇒ Object
Clear correlation ID for current thread.
-
#current_correlation_id ⇒ String
Get correlation ID for current thread.
- #generate_correlation_id ⇒ Object private
-
#initialize(config) ⇒ StructuredLogger
constructor
Initialize structured logger.
-
#log(level, message, **context) ⇒ Object
Log with structured format.
-
#set_correlation_id(id) ⇒ Object
Set correlation ID for current thread.
-
#with_correlation_id(id) { ... } ⇒ Object
Execute block with correlation ID.
Constructor Details
#initialize(config) ⇒ StructuredLogger
Initialize structured logger
196 197 198 199 200 |
# File 'lib/a2a/monitoring.rb', line 196 def initialize(config) @config = config @base_logger = config.logger @correlation_ids = {} end |
Instance Method Details
#clear_correlation_id ⇒ Object
Clear correlation ID for current thread
235 236 237 |
# File 'lib/a2a/monitoring.rb', line 235 def clear_correlation_id @correlation_ids.delete(Thread.current.object_id) end |
#current_correlation_id ⇒ String
Get correlation ID for current thread
230 231 232 |
# File 'lib/a2a/monitoring.rb', line 230 def current_correlation_id @correlation_ids[Thread.current.object_id] || generate_correlation_id end |
#generate_correlation_id ⇒ Object (private)
257 258 259 |
# File 'lib/a2a/monitoring.rb', line 257 def generate_correlation_id SecureRandom.hex(8) end |
#log(level, message, **context) ⇒ Object
Log with structured format
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/a2a/monitoring.rb', line 206 def log(level, , **context) return unless @base_logger correlation_id = current_correlation_id structured_data = { timestamp: Time.now.iso8601, level: level.to_s.upcase, message: , correlation_id: correlation_id, component: "a2a-ruby" }.merge(context) @base_logger.send(level, structured_data.to_json) end |
#set_correlation_id(id) ⇒ Object
Set correlation ID for current thread
224 225 226 |
# File 'lib/a2a/monitoring.rb', line 224 def set_correlation_id(id) @correlation_ids[Thread.current.object_id] = id end |
#with_correlation_id(id) { ... } ⇒ Object
Execute block with correlation ID
243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/a2a/monitoring.rb', line 243 def with_correlation_id(id) old_id = current_correlation_id set_correlation_id(id) yield ensure if old_id set_correlation_id(old_id) else clear_correlation_id end end |