1
0
mirror of https://github.com/meineerde/rackstash.git synced 2025-10-17 14:01:01 +00:00

Allow to write a Hash to the Logger to deep_merge fields

This commit is contained in:
Holger Just 2017-07-20 00:29:24 +02:00
parent 33ee63bffb
commit 4a62e3d189
2 changed files with 31 additions and 29 deletions

View File

@ -222,14 +222,16 @@ module Rackstash
#
# @param severity [Integer] The log severity. One of the {SEVERITIES}
# consants.
# @param msg [#to_s, Exception, nil] The log message. A `String` or
# `Exception`. If unset, we try to use the return value of the optional
# block.
# @param msg [#to_s, ::Hash, Exception, nil] The log message. If unset, we
# try, to use the return value of the optional block. If we get a `String`
# or `Exception`, we log a new {Message}. If it's a Hash, we deep_merge it
# into the current buffer's fields instead.
# @param progname [String, nil] The program name. Can be omitted. It's
# treated as a message if no `msg` and `block` are given.
# @yield If `message` is `nil`, we yield to the block to get a message
# string.
# @return [String] The resolved unformatted message string
# @return [Message, ::Hash, nil] The merged Hash, or the resolved {Message}
# or `nil` if nothing was logged
def add(severity, msg = nil, progname = nil)
severity = severity ? Integer(severity) : UNKNOWN
return if @level > severity
@ -244,21 +246,19 @@ module Rackstash
end
end
time = Time.now.utc.freeze
formatted_msg = formatter.call(
severity_label(severity),
time,
progname,
case msg
when Hash, Rackstash::Fields::Hash
buffer.fields.deep_merge!(msg)
msg
)
buffer.add_message Message.new(
formatted_msg,
time: time,
progname: progname,
severity: severity
)
formatted_msg
else
time = Time.now.utc.freeze
buffer.add_message Message.new(
formatter.call(Rackstash.severity_label(severity), time, progname, msg),
time: time,
progname: progname,
severity: severity
)
end
end
alias log add
@ -290,9 +290,5 @@ module Rackstash
def buffer
buffer_stack.current
end
def severity_label(severity)
SEVERITY_LABELS[severity] || SEVERITY_LABELS.last
end
end
end

View File

@ -138,8 +138,7 @@ describe Rackstash::Logger do
let(:buffer) {
double('Rackstash::Buffer').tap do |buffer|
expect(buffer).to receive(:add_message) { |message| messages << message }
.at_least(:once)
allow(buffer).to receive(:add_message) { |message| messages << message }
end
}
@ -153,12 +152,9 @@ describe Rackstash::Logger do
before do
class_double('Rackstash::Message').as_stubbed_const.tap do |klass|
expect(klass).to receive(:new) { |msg, **kwargs| { message: msg, **kwargs } }
.at_least(:once)
allow(klass).to receive(:new) { |msg, **kwargs| { message: msg, **kwargs } }
end
expect(logger).to receive(:buffer_stack)
.at_least(:once)
.and_return(buffer_stack)
allow(logger).to receive(:buffer_stack).and_return(buffer_stack)
end
it 'sets the current time as UTC to the message' do
@ -288,6 +284,16 @@ describe Rackstash::Logger do
)
end
it 'merges fields if message is a Hash' do
fields = instance_double('Rackstash::Fields::Hash')
expect(buffer).to receive(:fields).and_return(fields)
expect(fields).to receive(:deep_merge!).with(foo: 'bar')
expect(buffer).not_to receive(:add_message)
expect(logger.add(0, { foo: 'bar' })).to eql(foo: 'bar')
end
it 'can use debug shortcut' do
expect(logger).to receive(:add).with(0, 'Debug').and_call_original
logger.debug('Debug')