summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorThom May <thom@chef.io>2018-01-19 13:15:41 +0000
committerThom May <thom@chef.io>2018-02-15 14:13:09 +0000
commit5c41d803a179dc0e8ac0a2548e794c3b6ef3bcf2 (patch)
treee6c2b51f50d241f0f3c9eb75681d7d1bd523b8f0 /spec
parent62249f18082129fb956804ecfa2f90529a6adc6d (diff)
downloadmixlib-log-5c41d803a179dc0e8ac0a2548e794c3b6ef3bcf2.tar.gz
add metadata to log messages
Signed-off-by: Thom May <thom@chef.io>
Diffstat (limited to 'spec')
-rw-r--r--spec/mixlib/log/child_spec.rb41
-rw-r--r--spec/mixlib/log/formatter_spec.rb13
-rw-r--r--spec/mixlib/log_spec.rb13
3 files changed, 65 insertions, 2 deletions
diff --git a/spec/mixlib/log/child_spec.rb b/spec/mixlib/log/child_spec.rb
index daf3734..eef2ce9 100644
--- a/spec/mixlib/log/child_spec.rb
+++ b/spec/mixlib/log/child_spec.rb
@@ -39,10 +39,49 @@ RSpec.describe Mixlib::Log::Child do
expect(io.string).to match(/a message$/)
end
+ context "with structured data" do
+ it "can be created with metadata" do
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true" })
+ Logit.with_child({ child: "true" }) { |l| l.warn("a message") }
+ end
+
+ it "a message can be logged" do
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true" })
+ Logit.with_child { |l| l.warn("a message", data: { child: "true" }) }
+ end
+
+ context "merges properly" do
+ it "in the simple case" do
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", meta: "data" })
+ Logit.with_child(meta: "data") { |l| l.warn("a message", data: { child: "true" }) }
+ end
+
+ it "when overwriting" do
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", meta: "overwritten" })
+ Logit.with_child(meta: "data") { |l| l.warn("a message", data: { child: "true", meta: "overwritten" }) }
+ end
+ end
+
+ context "when receiving a message from a child" do
+ it "passes data on" do
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", parent: "first" })
+ child.metadata = { parent: "first" }
+ child.with_child { |l| l.warn("a message", data: { child: "true" }) }
+ end
+
+ it "merges its own data" do
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[:warn], "a message", nil, data: { child: "true", parent: "second" })
+ child.metadata = { parent: "first" }
+ child.with_child { |l| l.warn("a message", data: { child: "true", parent: "second" }) }
+ end
+ end
+ end
+
context "sends a message to the parent" do
%i{ debug info warn error fatal }.each do |level|
it "at #{level}" do
- expect(Logit).to receive(:pass).with(level, "a #{level} message", nil)
+ expect(Logit).to receive(:pass).with(Mixlib::Log::LEVELS[level], "a #{level} message", nil, data: {})
+ Logit.level = level
child.send(level, "a #{level} message")
end
end
diff --git a/spec/mixlib/log/formatter_spec.rb b/spec/mixlib/log/formatter_spec.rb
index dd3ce25..16e45af 100644
--- a/spec/mixlib/log/formatter_spec.rb
+++ b/spec/mixlib/log/formatter_spec.rb
@@ -48,4 +48,17 @@ RSpec.describe Mixlib::Log::Formatter do
expect(@formatter.call("monkey", Time.new, "test", "mos def")).to eq("monkey: mos def\n")
end
+ context "with structured data" do
+ let(:data) { {} }
+
+ it "should format a message" do
+ data[:msg] = "nuthin new"
+ expect(@formatter.msg2str(data)).to eq("nuthin new")
+ end
+
+ it "should format an exception" do
+ data[:err] = IOError.new("legendary roots crew")
+ expect(@formatter.msg2str(data)).to eq("legendary roots crew (IOError)\n")
+ end
+ end
end
diff --git a/spec/mixlib/log_spec.rb b/spec/mixlib/log_spec.rb
index 69eebd5..ac4932d 100644
--- a/spec/mixlib/log_spec.rb
+++ b/spec/mixlib/log_spec.rb
@@ -23,9 +23,19 @@ require "spec_helper"
class LoggerLike
attr_accessor :level
- attr_reader :messages
+ attr_reader :messages, :data
def initialize
@messages = ""
+ @data = []
+ end
+
+ def add_data(severity, message = nil, progname = nil, data: {})
+ @messages << message
+ @data << data
+ end
+
+ def add(severity, message = nil, progname = nil, data: {})
+ @messages << message
end
[:debug, :info, :warn, :error, :fatal].each do |method_name|
@@ -64,6 +74,7 @@ RSpec.describe Mixlib::Log do
it "uses the logger provided when initialized with a logger like object" do
logger = LoggerLike.new
Logit.init(logger)
+ Logit.level = :debug
Logit.debug "qux"
expect(logger.messages).to match(/qux/)
end