Module: RailsSemanticLogging::RSpec::CaptureAppender
- Defined in:
- lib/rails_semantic_logging/rspec/matchers.rb
Overview
Shared capture plumbing for the block matchers. Opens the logger gate to :trace so every event reaches the in-memory capture appender, while pinning the pre-existing appenders to the previously visible threshold (default_level, or an active SemanticLogger.silence override such as the LOG env var hook) so widening the gate does not spill every captured event to stdout.
Class Method Summary collapse
-
.pin_live_appenders(level) ⇒ Object
Pins every live appender to
level, returning the [appender, original_level] pairs needed to restore them afterwards. -
.visible_level(default_level) ⇒ Object
The threshold actually in effect before the matcher widened the gate: a SemanticLogger.silence override (stored as a level index in a thread-local by both semantic_logger 4.x and 5.x) wins over default_level.
- .with_capture_appender(capture) ⇒ Object
Class Method Details
.pin_live_appenders(level) ⇒ Object
Pins every live appender to level, returning the [appender, original_level]
pairs needed to restore them afterwards.
49 50 51 52 53 54 55 |
# File 'lib/rails_semantic_logging/rspec/matchers.rb', line 49 def pin_live_appenders(level) ::SemanticLogger.appenders.to_a.map do |appender| original = appender.level appender.level = level [appender, original] end end |
.visible_level(default_level) ⇒ Object
The threshold actually in effect before the matcher widened the gate: a SemanticLogger.silence override (stored as a level index in a thread-local by both semantic_logger 4.x and 5.x) wins over default_level.
60 61 62 63 |
# File 'lib/rails_semantic_logging/rspec/matchers.rb', line 60 def visible_level(default_level) silence_index = Thread.current[:semantic_logger_silence] silence_index ? ::SemanticLogger::Levels::LEVELS[silence_index] : default_level end |
.with_capture_appender(capture) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rails_semantic_logging/rspec/matchers.rb', line 34 def with_capture_appender(capture) previous_level = ::SemanticLogger.default_level pinned = pin_live_appenders(visible_level(previous_level)) ::SemanticLogger.add_appender(appender: capture) ::SemanticLogger.default_level = :trace yield ::SemanticLogger.flush ensure ::SemanticLogger.default_level = previous_level pinned&.each { |appender, level| appender.level = level } ::SemanticLogger.remove_appender(capture) end |