Module: Smplkit::Logging::Levels
- Defined in:
- lib/smplkit/logging/levels.rb
Overview
Bidirectional mapping between Ruby stdlib Logger levels and smplkit canonical levels (per ADR-046 §2.3).
Stdlib Logger has DEBUG/INFO/WARN/ERROR/FATAL/UNKNOWN — no TRACE. The stdlib-logger adapter maps smplkit TRACE to stdlib DEBUG when applying levels, and maps stdlib DEBUG to smplkit DEBUG when discovering — there is no way to distinguish smplkit-TRACE-mapped-to- DEBUG from genuine DEBUG, which is consistent with how the Python stdlib-logging adapter handles the same gap.
Constant Summary collapse
- STDLIB_TO_SMPL =
{ ::Logger::DEBUG => LogLevel::DEBUG, ::Logger::INFO => LogLevel::INFO, ::Logger::WARN => LogLevel::WARN, ::Logger::ERROR => LogLevel::ERROR, ::Logger::FATAL => LogLevel::FATAL, ::Logger::UNKNOWN => LogLevel::SILENT }.freeze
- SMPL_TO_STDLIB =
{ LogLevel::TRACE => ::Logger::DEBUG, LogLevel::DEBUG => ::Logger::DEBUG, LogLevel::INFO => ::Logger::INFO, LogLevel::WARN => ::Logger::WARN, LogLevel::ERROR => ::Logger::ERROR, LogLevel::FATAL => ::Logger::FATAL, LogLevel::SILENT => ::Logger::UNKNOWN }.freeze
- SEMANTIC_TO_SMPL =
SemanticLogger’s level system natively includes TRACE — a 1-to-1 map.
{ trace: LogLevel::TRACE, debug: LogLevel::DEBUG, info: LogLevel::INFO, warn: LogLevel::WARN, error: LogLevel::ERROR, fatal: LogLevel::FATAL }.freeze
- SMPL_TO_SEMANTIC =
SEMANTIC_TO_SMPL.invert.freeze
Class Method Summary collapse
- .nearest_smpl_for(stdlib_level) ⇒ Object
- .semantic_level_to_smpl(level) ⇒ Object
- .smpl_level_to_semantic(level) ⇒ Object
- .smpl_level_to_stdlib(level) ⇒ Object
- .stdlib_level_to_smpl(level) ⇒ Object
Class Method Details
.nearest_smpl_for(stdlib_level) ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'lib/smplkit/logging/levels.rb', line 74 def nearest_smpl_for(stdlib_level) sorted = STDLIB_TO_SMPL.keys.sort best = sorted.first sorted.each do |bp| break if bp > stdlib_level best = bp end STDLIB_TO_SMPL[best] end |
.semantic_level_to_smpl(level) ⇒ Object
62 63 64 65 66 |
# File 'lib/smplkit/logging/levels.rb', line 62 def semantic_level_to_smpl(level) return LogLevel::INFO if level.nil? SEMANTIC_TO_SMPL[level.to_sym] || LogLevel::INFO end |
.smpl_level_to_semantic(level) ⇒ Object
68 69 70 71 72 |
# File 'lib/smplkit/logging/levels.rb', line 68 def smpl_level_to_semantic(level) coerced = LogLevel.coerce(level) # SemanticLogger has no SILENT — closest equivalent is :fatal. SMPL_TO_SEMANTIC[coerced] || :fatal end |
.smpl_level_to_stdlib(level) ⇒ Object
45 46 47 48 |
# File 'lib/smplkit/logging/levels.rb', line 45 def smpl_level_to_stdlib(level) coerced = LogLevel.coerce(level) SMPL_TO_STDLIB.fetch(coerced) end |
.stdlib_level_to_smpl(level) ⇒ Object
39 40 41 42 43 |
# File 'lib/smplkit/logging/levels.rb', line 39 def stdlib_level_to_smpl(level) return LogLevel::DEBUG if level.nil? STDLIB_TO_SMPL[level] || nearest_smpl_for(level) end |