From 64da642b41472e34cb6ba0a9af63c71c3fa02c08 Mon Sep 17 00:00:00 2001 From: Tiago Cardoso Date: Mon, 13 Jul 2026 19:29:32 +0100 Subject: [PATCH] make scoped logger work with logger objects with non-int level `Logger#level` returns an integer, however many other logger libraries in ruby land don't do that, most notably semantic_logger, which is nowadays recommended by rails for structured logging; `SemanticLogger::Logger` objects return `#level` as a symbol (ex: `:info`). This patch fixes it by allowing a escape hatch for non-integer levels; just call `#upcase` (which both strings and symbols support) and pass it to `Logger::Severity.const_get`. --- temporalio/lib/temporalio/scoped_logger.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/temporalio/lib/temporalio/scoped_logger.rb b/temporalio/lib/temporalio/scoped_logger.rb index fd4969a4..52c26145 100644 --- a/temporalio/lib/temporalio/scoped_logger.rb +++ b/temporalio/lib/temporalio/scoped_logger.rb @@ -42,6 +42,21 @@ def add(severity, message = nil, progname = nil) end alias log add + # returns the logger log level as an integer. + def level + lvl = super + + return lvl if lvl.is_a?(Integer) + + return Logger::UNKNOWN unless lvl.respond_to?(:upcase) + + if Logger::Severity.const_defined?(lvl.upcase, false) + Logger::Severity.const_get(lvl.upcase, false) + else + Logger::UNKNOWN + end + end + # @see Logger.debug def debug(progname = nil, &) add(Logger::DEBUG, nil, progname, &)