Skip to content

Commit

Permalink
Fix logging outside the request/response cycle
Browse files Browse the repository at this point in the history
fixes cases where the `rage_logger` variable is empty, e.g. `Rage.logger` is used in Sidekiq
  • Loading branch information
rsamoilov committed Mar 5, 2024
1 parent d94e174 commit 4174d76
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 19 deletions.
4 changes: 3 additions & 1 deletion lib/rage/logger/json_formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def initialize
end

def call(severity, timestamp, _, message)
logger = Thread.current[:rage_logger]
logger = Thread.current[:rage_logger] || { tags: [], context: {} }
tags, context = logger[:tags], logger[:context]

if !context.empty?
Expand All @@ -29,6 +29,8 @@ def call(severity, timestamp, _, message)
tags_msg = "{\"tags\":[\"#{tags[0]}\"],\"timestamp\":\"#{timestamp}\",\"pid\":\"#{@pid}\",\"level\":\"#{severity}\""
elsif tags.length == 2
tags_msg = "{\"tags\":[\"#{tags[0]}\",\"#{tags[1]}\"],\"timestamp\":\"#{timestamp}\",\"pid\":\"#{@pid}\",\"level\":\"#{severity}\""
elsif tags.length == 0
tags_msg = "{\"tags\":[],\"timestamp\":\"#{timestamp}\",\"pid\":\"#{@pid}\",\"level\":\"#{severity}\""
else
tags_msg = "{\"tags\":[\"#{tags[0]}\",\"#{tags[1]}\""
i = 2
Expand Down
20 changes: 3 additions & 17 deletions lib/rage/logger/logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def formatter=(formatter)
# Rage.logger.info "cache miss"
# end
def with_context(context)
old_context = Thread.current[:rage_logger][:context]
old_context = (Thread.current[:rage_logger] ||= { tags: [], context: {} })[:context]

if old_context.empty? # there's nothing in the context yet
Thread.current[:rage_logger][:context] = context
Expand All @@ -104,7 +104,7 @@ def with_context(context)
# Rage.logger.info "success"
# end
def tagged(tag)
Thread.current[:rage_logger][:tags] << tag
(Thread.current[:rage_logger] ||= { tags: [], context: {} })[:tags] << tag
yield(self)
ensure
Thread.current[:rage_logger][:tags].pop
Expand All @@ -115,8 +115,6 @@ def tagged(tag)
private

def define_log_methods
console_mode = Rage.config.internal.rails_mode ? Rage.config.internal.rails_console : defined?(IRB)

methods = METHODS_MAP.map do |level_name, level_val|
if @logdev.nil? || level_val < @level
# logging is disabled or the log level is higher than the current one
Expand All @@ -125,7 +123,7 @@ def #{level_name}(msg = nil)
false
end
RUBY
elsif console_mode
elsif Rage.config.internal.rails_mode ? Rage.config.internal.rails_console : defined?(IRB)
# the call was made from the console - don't use the formatter
<<-RUBY
def #{level_name}(msg = nil)
Expand Down Expand Up @@ -157,17 +155,5 @@ def #{level_name}(msg = nil)
end

self.class.class_eval(methods.join("\n"))

if console_mode
self.class.class_eval <<-RUBY
def with_context(_)
yield(self)
end
def tagged(_)
yield(self)
end
RUBY
end
end
end
4 changes: 3 additions & 1 deletion lib/rage/logger/text_formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def initialize
end

def call(severity, timestamp, _, message)
logger = Thread.current[:rage_logger]
logger = Thread.current[:rage_logger] || { tags: [], context: {} }
tags, context = logger[:tags], logger[:context]

if !context.empty?
Expand All @@ -29,6 +29,8 @@ def call(severity, timestamp, _, message)
tags_msg = "[#{tags[0]}] timestamp=#{timestamp} pid=#{@pid} level=#{severity}"
elsif tags.length == 2
tags_msg = "[#{tags[0]}][#{tags[1]}] timestamp=#{timestamp} pid=#{@pid} level=#{severity}"
elsif tags.length == 0
tags_msg = "timestamp=#{timestamp} pid=#{@pid} level=#{severity}"
else
tags_msg = "[#{tags[0]}][#{tags[1]}]"
i = 2
Expand Down

0 comments on commit 4174d76

Please sign in to comment.