Module: Tempest::DebugLog
- Defined in:
- lib/tempest/debug_log.rb
Overview
Thin wrapper around stdlib Logger for opt-in debug logging.
Activated only when the TEMPEST_DEBUG_LOG environment variable points at a writable path. Otherwise from_env returns a Logger pointed at IO::NULL at FATAL level, so call sites can unconditionally call ‘info`/`debug`/`warn` without an `if logger` guard and without producing any output or file I/O.
Output format is ISO-8601 local time + level + progname tag + message, e.g.:
2026-05-17T10:30:42+09:00 INFO [stream] reconnect attempt=2 cursor=nil
Constant Summary collapse
- LEVELS =
{ "DEBUG" => Logger::DEBUG, "INFO" => Logger::INFO, "WARN" => Logger::WARN, "ERROR" => Logger::ERROR, "FATAL" => Logger::FATAL, }.freeze
Class Method Summary collapse
- .build_null_logger ⇒ Object
- .formatter ⇒ Object
- .from_env(env) ⇒ Object
- .resolve_level(value) ⇒ Object
Class Method Details
.build_null_logger ⇒ Object
41 42 43 44 45 |
# File 'lib/tempest/debug_log.rb', line 41 def build_null_logger logger = Logger.new(IO::NULL) logger.level = Logger::FATAL logger end |
.formatter ⇒ Object
47 48 49 50 51 52 |
# File 'lib/tempest/debug_log.rb', line 47 def formatter proc do |severity, time, progname, msg| tag = progname && !progname.to_s.empty? ? "[#{progname}] " : "" "#{time.iso8601} #{severity.ljust(5)} #{tag}#{msg}\n" end end |
.from_env(env) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/tempest/debug_log.rb', line 26 def from_env(env) raw = env["TEMPEST_DEBUG_LOG"] if raw.nil? || raw.empty? return build_null_logger end path = File.(raw) FileUtils.mkdir_p(File.dirname(path)) logger = Logger.new(path, "daily") logger.level = resolve_level(env["TEMPEST_DEBUG_LOG_LEVEL"]) || Logger::INFO logger.formatter = formatter logger end |
.resolve_level(value) ⇒ Object
54 55 56 57 |
# File 'lib/tempest/debug_log.rb', line 54 def resolve_level(value) return nil if value.nil? || value.empty? LEVELS[value.to_s.upcase] end |