Skip to content

Commit 97c6eca

Browse files
add support for Logger.with_context(**context) {} for per-scope message context
1 parent f3e5034 commit 97c6eca

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

lib/logger.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,17 @@ def with_level(severity)
418418
end
419419
end
420420

421+
def with_context(context)
422+
prev_context = @context
423+
@context = @context.nil? ? context : @context.merge(context)
424+
425+
begin
426+
yield
427+
ensure
428+
@context = prev_context
429+
end
430+
end
431+
421432
# Program name to include in log messages.
422433
attr_accessor :progname
423434

@@ -605,7 +616,7 @@ def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
605616
@default_formatter = Formatter.new
606617
self.datetime_format = datetime_format
607618
self.formatter = formatter
608-
@logdev = nil
619+
@logdev = @context = nil
609620
@level_override = {}
610621
return unless logdev
611622
case logdev
@@ -797,6 +808,15 @@ def level_key
797808
end
798809

799810
def format_message(severity, datetime, progname, msg, **kwargs)
800-
(@formatter || @default_formatter).call(severity, datetime, progname, msg, **kwargs)
811+
context = @context
812+
unless kwargs.empty?
813+
context = context.nil? ? kwargs : context.merge(kwargs)
814+
end
815+
816+
if context.nil?
817+
(@formatter || @default_formatter).call(severity, datetime, progname, msg)
818+
else
819+
(@formatter || @default_formatter).call(severity, datetime, progname, msg, **context)
820+
end
801821
end
802822
end

0 commit comments

Comments
 (0)