Skip to content

Commit 5fcf6f7

Browse files
authored
Write Puma logs to Steno (#3686)
Instead of sending Puma logs to STDOUT and STDERR, re-use the 'cc.runner' Steno logger by passing two Steno wrappers to Puma::LogWriter - one writing messages at :info level and another one writing at :error level.
1 parent 62798e9 commit 5fcf6f7

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

lib/cloud_controller/logs/steno_io.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class StenoIO
2+
def initialize(logger, level)
3+
@logger = logger
4+
@level = level
5+
end
6+
7+
def write(str)
8+
@logger.log(@level, str)
9+
end
10+
11+
def sync
12+
true
13+
end
14+
end

lib/cloud_controller/runners/puma_runner.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require 'puma'
22
require 'puma/configuration'
33
require 'puma/events'
4+
require 'cloud_controller/logs/steno_io'
45

56
module VCAP::CloudController
67
class PumaRunner
@@ -35,7 +36,10 @@ def initialize(config, app, logger, periodic_updater, request_logs)
3536
end
3637
end
3738

38-
log_writer = Puma::LogWriter.stdio
39+
log_writer = Puma::LogWriter.new(StenoIO.new(logger, :info), StenoIO.new(logger, :error))
40+
41+
# replace PidFormatter as we already have the pid in the Steno log record
42+
puma_config.options[:log_formatter] = Puma::LogWriter::DefaultFormatter.new
3943

4044
events = Puma::Events.new
4145
events.on_booted do
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require 'spec_helper'
2+
3+
module VCAP::CloudController::Logs
4+
RSpec.describe StenoIO do
5+
let(:logger) { double(:logger) }
6+
let(:level) { :info }
7+
8+
subject { StenoIO.new(logger, level) }
9+
10+
describe '#write' do
11+
it 'writes to the logger' do
12+
expect(logger).to receive(:log).with(level, 'message')
13+
14+
subject.write('message')
15+
end
16+
end
17+
18+
describe '#sync' do
19+
it 'returns true' do
20+
expect(subject.sync).to be(true)
21+
end
22+
end
23+
end
24+
end

spec/unit/lib/cloud_controller/runners/puma_runner_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,19 @@ module VCAP::CloudController
135135
end
136136
end
137137
end
138+
139+
describe 'Logging' do
140+
it 'LogWriter.log uses Steno logger with :info level' do
141+
expect(logger).to receive(:log).with(:info, /log message/)
142+
143+
puma_launcher.log_writer.log('log message')
144+
end
145+
146+
it 'LogWriter.error uses Steno logger with :error level' do
147+
expect(logger).to receive(:log).with(:error, /ERROR: error message/)
148+
149+
expect { puma_launcher.log_writer.error('error message') }.to raise_error(SystemExit)
150+
end
151+
end
138152
end
139153
end

0 commit comments

Comments
 (0)