2018-12-29 00:05:51 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
require_relative "helper"
|
|
|
|
require "sidekiq/logger"
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
describe 'logger' do
|
|
|
|
before do
|
2018-12-29 07:54:05 -08:00
|
|
|
@output = StringIO.new
|
|
|
|
@logger = Sidekiq::Logger.new(@output)
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2019-02-11 22:59:52 +01:00
|
|
|
Sidekiq.log_formatter = nil
|
2018-12-29 07:54:05 -08:00
|
|
|
Thread.current[:sidekiq_context] = nil
|
|
|
|
Thread.current[:sidekiq_tid] = nil
|
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
after do
|
2019-02-11 22:59:52 +01:00
|
|
|
Sidekiq.log_formatter = nil
|
2018-12-29 07:54:05 -08:00
|
|
|
Thread.current[:sidekiq_context] = nil
|
|
|
|
Thread.current[:sidekiq_tid] = nil
|
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests default logger format' do
|
2019-02-11 22:59:52 +01:00
|
|
|
assert_kind_of Sidekiq::Logger::Formatters::Pretty, Sidekiq::Logger.new(@output).formatter
|
|
|
|
end
|
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests heroku logger formatter' do
|
2022-03-03 12:50:03 -08:00
|
|
|
ENV["DYNO"] = "dyno identifier"
|
|
|
|
assert_kind_of Sidekiq::Logger::Formatters::WithoutTimestamp, Sidekiq::Logger.new(@output).formatter
|
|
|
|
ensure
|
|
|
|
ENV["DYNO"] = nil
|
2019-02-11 22:59:52 +01:00
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests json logger formatter' do
|
2019-02-11 22:59:52 +01:00
|
|
|
Sidekiq.log_formatter = Sidekiq::Logger::Formatters::JSON.new
|
|
|
|
|
|
|
|
assert_kind_of Sidekiq::Logger::Formatters::JSON, Sidekiq::Logger.new(@output).formatter
|
2018-12-29 07:54:05 -08:00
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests with context' do
|
2019-10-01 19:19:26 -07:00
|
|
|
subject = Sidekiq::Context
|
|
|
|
assert_equal({}, subject.current)
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2019-10-01 19:19:26 -07:00
|
|
|
subject.with(a: 1) do
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal({a: 1}, subject.current)
|
2018-12-29 00:05:51 +01:00
|
|
|
end
|
|
|
|
|
2019-10-01 19:19:26 -07:00
|
|
|
assert_equal({}, subject.current)
|
2018-12-29 07:54:05 -08:00
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests with overlapping context' do
|
2020-12-23 12:44:35 -08:00
|
|
|
subject = Sidekiq::Context
|
2022-03-03 12:50:03 -08:00
|
|
|
subject.current.merge!({foo: "bar"})
|
|
|
|
assert_equal({foo: "bar"}, subject.current)
|
2020-12-23 12:44:35 -08:00
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
subject.with(foo: "bingo") do
|
|
|
|
assert_equal({foo: "bingo"}, subject.current)
|
2020-12-23 12:44:35 -08:00
|
|
|
end
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal({foo: "bar"}, subject.current)
|
2020-12-23 12:44:35 -08:00
|
|
|
end
|
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests nested contexts' do
|
2019-10-01 19:19:26 -07:00
|
|
|
subject = Sidekiq::Context
|
|
|
|
assert_equal({}, subject.current)
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2019-10-01 19:19:26 -07:00
|
|
|
subject.with(a: 1) do
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal({a: 1}, subject.current)
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2019-10-01 19:19:26 -07:00
|
|
|
subject.with(b: 2, c: 3) do
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal({a: 1, b: 2, c: 3}, subject.current)
|
2018-12-29 00:05:51 +01:00
|
|
|
end
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal({a: 1}, subject.current)
|
2018-12-29 00:05:51 +01:00
|
|
|
end
|
|
|
|
|
2019-10-01 19:19:26 -07:00
|
|
|
assert_equal({}, subject.current)
|
2018-12-29 07:54:05 -08:00
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests formatted output' do
|
2018-12-29 07:54:05 -08:00
|
|
|
@logger.info("hello world")
|
|
|
|
assert_match(/INFO: hello world/, @output.string)
|
|
|
|
reset(@output)
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
formats = [Sidekiq::Logger::Formatters::Pretty,
|
|
|
|
Sidekiq::Logger::Formatters::WithoutTimestamp,
|
|
|
|
Sidekiq::Logger::Formatters::JSON]
|
2018-12-29 07:54:05 -08:00
|
|
|
formats.each do |fmt|
|
|
|
|
@logger.formatter = fmt.new
|
2022-03-03 12:50:03 -08:00
|
|
|
Sidekiq::Context.with(class: "HaikuWorker", bid: "b-1234abc") do
|
2018-12-29 07:54:05 -08:00
|
|
|
@logger.info("hello context")
|
2018-12-29 00:05:51 +01:00
|
|
|
end
|
2018-12-29 07:54:05 -08:00
|
|
|
assert_match(/INFO/, @output.string)
|
|
|
|
assert_match(/hello context/, @output.string)
|
|
|
|
assert_match(/b-1234abc/, @output.string)
|
|
|
|
reset(@output)
|
|
|
|
end
|
|
|
|
end
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'makes sure json output is parseable' do
|
2018-12-29 07:54:05 -08:00
|
|
|
@logger.formatter = Sidekiq::Logger::Formatters::JSON.new
|
2018-12-29 00:05:51 +01:00
|
|
|
|
2018-12-29 07:54:05 -08:00
|
|
|
@logger.debug("boom")
|
2022-03-03 12:50:03 -08:00
|
|
|
Sidekiq::Context.with(class: "HaikuWorker", jid: "1234abc") do
|
2018-12-29 07:54:05 -08:00
|
|
|
@logger.info("json format")
|
2018-12-29 00:05:51 +01:00
|
|
|
end
|
2018-12-29 07:54:05 -08:00
|
|
|
a, b = @output.string.lines
|
|
|
|
hash = JSON.parse(a)
|
|
|
|
keys = hash.keys.sort
|
|
|
|
assert_equal ["lvl", "msg", "pid", "tid", "ts"], keys
|
|
|
|
assert_nil hash["ctx"]
|
|
|
|
assert_equal hash["lvl"], "DEBUG"
|
|
|
|
|
|
|
|
hash = JSON.parse(b)
|
|
|
|
keys = hash.keys.sort
|
|
|
|
assert_equal ["ctx", "lvl", "msg", "pid", "tid", "ts"], keys
|
|
|
|
refute_nil hash["ctx"]
|
|
|
|
assert_equal "1234abc", hash["ctx"]["jid"]
|
|
|
|
assert_equal "INFO", hash["lvl"]
|
|
|
|
end
|
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests forwards logger kwards' do
|
2019-12-31 13:43:01 -05:00
|
|
|
assert_silent do
|
2022-03-03 12:50:03 -08:00
|
|
|
logger = Sidekiq::Logger.new("/dev/null", level: Logger::INFO)
|
2019-12-31 13:43:01 -05:00
|
|
|
|
|
|
|
assert_equal Logger::INFO, logger.level
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-06-02 10:31:42 -07:00
|
|
|
it 'tests log level query methods' do
|
2022-03-03 12:50:03 -08:00
|
|
|
logger = Sidekiq::Logger.new("/dev/null", level: Logger::INFO)
|
2020-02-14 11:18:45 -05:00
|
|
|
|
|
|
|
refute_predicate logger, :debug?
|
|
|
|
assert_predicate logger, :info?
|
|
|
|
assert_predicate logger, :warn?
|
|
|
|
|
|
|
|
logger.level = Logger::WARN
|
|
|
|
refute_predicate logger, :info?
|
|
|
|
assert_predicate logger, :warn?
|
|
|
|
end
|
|
|
|
|
2018-12-29 07:54:05 -08:00
|
|
|
def reset(io)
|
|
|
|
io.truncate(0)
|
|
|
|
io.rewind
|
2018-12-29 00:05:51 +01:00
|
|
|
end
|
|
|
|
end
|