Skip to content

Commit 932afa7

Browse files
committed
Use new public 7.1 broadcast logging API
We no longer need to wrap loggers as you can inspect all broadcasted loggers and automatically send the same log level or other method calls to each. We added a wrap method to wrap a logger with a broadcaster in: ManageIQ/manageiq-loggers#63 See also: https://www.github.com/rails/rails/pull/48615
1 parent eb83a2c commit 932afa7

File tree

2 files changed

+41
-33
lines changed

2 files changed

+41
-33
lines changed

Diff for: lib/vmdb/loggers.rb

+2-17
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,8 @@ def self.create_logger(log_file_name, logger_class = ManageIQ::Loggers::Base)
8686
log_file = ManageIQ.root.join("log", log_file) if log_file.try(:dirname).to_s == "."
8787
progname = log_file.try(:basename, ".*").to_s
8888

89-
logger_class.new(nil, :progname => progname).tap do |logger|
90-
# HACK: In order to access the wrapped logger in test, we inject it as an instance var.
91-
if Rails.env.test?
92-
logger.instance_variable_set(:@wrapped_logger, wrapped_logger)
93-
94-
def logger.wrapped_logger
95-
@wrapped_logger
96-
end
97-
end
98-
99-
logger.extend(ActiveSupport::Logger.broadcast(wrapped_logger))
100-
if logger.class.const_defined?(:FormatterMixin)
101-
wrapped_logger.formatter.extend(logger.class.const_get(:FormatterMixin))
102-
end
103-
104-
wrapped_logger.progname = progname
105-
end
89+
logger = logger_class.new(nil, :progname => progname)
90+
logger.wrap(wrapped_logger).tap { |broadcaster| broadcaster.progname = progname }
10691
end
10792

10893
private_class_method def self.configure_external_loggers

Diff for: spec/lib/vmdb/loggers_spec.rb

+39-16
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def in_container_env(example)
3232

3333
subject { described_class.create_logger(log_file) }
3434

35-
let(:container_log) { subject.try(:wrapped_logger) }
35+
let(:container_log) { subject.try(:broadcasts).try(:last) }
3636

3737
before do
3838
# Hide the container logger output to STDOUT
@@ -65,15 +65,21 @@ def in_container_env(example)
6565

6666
it "#logdev" do
6767
if container_log
68-
expect(subject.logdev).to be_nil
68+
expect(subject.broadcasts.first.logdev).to be_nil
69+
expect(container_log.logdev).to be_a Logger::LogDevice
6970
else
7071
expect(subject.logdev).to be_a Logger::LogDevice
7172
end
7273
end
7374

7475
describe "#datetime_format" do
7576
it "return nil" do
76-
expect(subject.datetime_format).to be nil
77+
if container_log
78+
expect(subject.datetime_format.first).to be nil
79+
expect(subject.datetime_format.last).to be nil
80+
else
81+
expect(subject.datetime_format).to be nil
82+
end
7783
end
7884

7985
it "does not raise an error" do
@@ -91,15 +97,18 @@ def in_container_env(example)
9197
end
9298

9399
it "forwards to the other loggers" do
94-
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
95-
expect(container_log).to receive(:add).with(1, nil, "test message").and_call_original if container_log
96-
100+
if container_log
101+
expect(subject.broadcasts.first).to receive(:add).with(1, nil, "test message").and_call_original
102+
expect(subject.broadcasts.last).to receive(:add).with(1, nil, "test message").and_call_original
103+
else
104+
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
105+
end
97106
subject.info("test message")
98107
end
99108

100109
it "only forwards the message if the severity is correct" do
101110
if container_log
102-
expect(subject.logdev).to be_nil
111+
expect(subject.broadcasts.first.logdev).to be_nil
103112
expect(container_log.logdev).not_to receive(:write).with("test message")
104113
else
105114
expect(subject.logdev).not_to receive(:write).with("test message")
@@ -139,8 +148,12 @@ def in_container_env(example)
139148
let(:log_file) { StringIO.new }
140149

141150
it "logs correctly" do
142-
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
143-
expect(container_log).to receive(:add).with(1, nil, "test message").and_call_original if container_log
151+
if container_log
152+
expect(subject.broadcasts.first).to receive(:add).with(1, nil, "test message").and_call_original
153+
expect(subject.broadcasts.last).to receive(:add).with(1, nil, "test message").and_call_original
154+
else
155+
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
156+
end
144157

145158
subject.info("test message")
146159

@@ -154,8 +167,12 @@ def in_container_env(example)
154167
after { log_file.delete if log_file.exist? }
155168

156169
it "logs correctly" do
157-
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
158-
expect(container_log).to receive(:add).with(1, nil, "test message").and_call_original if container_log
170+
if container_log
171+
expect(subject.broadcasts.first).to receive(:add).with(1, nil, "test message").and_call_original
172+
expect(subject.broadcasts.last).to receive(:add).with(1, nil, "test message").and_call_original
173+
else
174+
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
175+
end
159176

160177
subject.info("test message")
161178

@@ -169,9 +186,12 @@ def in_container_env(example)
169186
after { File.delete(log_file) if File.exist?(log_file) }
170187

171188
it "logs correctly" do
172-
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
173-
expect(container_log).to receive(:add).with(1, nil, "test message").and_call_original if container_log
174-
189+
if container_log
190+
expect(subject.broadcasts.first).to receive(:add).with(1, nil, "test message").and_call_original
191+
expect(subject.broadcasts.last).to receive(:add).with(1, nil, "test message").and_call_original
192+
else
193+
expect(subject).to receive(:add).with(1, nil, "test message").and_call_original
194+
end
175195
subject.info("test message")
176196

177197
expect(File.read(log_file)).to include("test message") unless container_log
@@ -212,12 +232,15 @@ def in_container_env(example)
212232

213233
it "will honor the log level in the container logger" do
214234
log = described_class.create_logger(log_file_name)
215-
container_log = log.wrapped_logger
235+
container_log = log.broadcasts.last
216236

217237
described_class.apply_config_value({:level_foo => :error}, log, :level_foo)
218-
219238
expect(log.level).to eq(Logger::ERROR)
220239
expect(container_log.level).to eq(Logger::ERROR)
240+
241+
described_class.apply_config_value({:level_foo => :debug}, log, :level_foo)
242+
expect(log.level).to eq(Logger::DEBUG)
243+
expect(container_log.level).to eq(Logger::DEBUG)
221244
end
222245
end
223246
end

0 commit comments

Comments
 (0)