From 2261315dcc250b17fb81715ad69334593c091dd7 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 25 Jan 2017 23:29:34 +0100 Subject: [PATCH] Use a class instance for Message's default formatter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calling #call in a custom class instead of a lambda performs much better: require 'benchmark/ips' class RawFormatter def call(_severity, _timestamp, _progname, msg) msg end end Benchmark.ips do |x| message = 'my message' proc = ->(_severity, _timestamp, _progname, msg) { msg } instance = RawFormatter.new x.report('proc') do proc.call(nil, nil, nil, message) end x.report('instance') do instance.call(nil, nil, nil, message) end x.compare! end # Warming up -------------------------------------- # proc 159.882k i/100ms # instance 182.648k i/100ms # Calculating ------------------------------------- # proc 4.612M (± 5.2%) i/s - 23.023M in 5.005950s # instance 7.716M (± 6.3%) i/s - 38.539M in 5.015306s # # Comparison: # instance: 7716097.7 i/s # proc: 4611920.5 i/s - 1.67x slower --- lib/rackstash/formatter.rb | 6 ++++++ lib/rackstash/message.rb | 2 +- spec/rackstash/formatter_spec.rb | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/rackstash/formatter.rb b/lib/rackstash/formatter.rb index 16a06ec..2d58197 100644 --- a/lib/rackstash/formatter.rb +++ b/lib/rackstash/formatter.rb @@ -25,4 +25,10 @@ module Rackstash "#{msg2str(msg)}\n" end end + + class RawFormatter + def call(_severity, _timestamp, _progname, msg) + msg + end + end end diff --git a/lib/rackstash/message.rb b/lib/rackstash/message.rb index a26d877..29ce90f 100644 --- a/lib/rackstash/message.rb +++ b/lib/rackstash/message.rb @@ -6,7 +6,7 @@ module Rackstash # This class and all its data are immutable after initialization class Message - RAW_FORMATTER = ->(_severity, _timestamp, _progname, msg) { msg } + RAW_FORMATTER = RawFormatter.new SEVERITY_LABEL = [ 'DEBUG'.freeze, diff --git a/spec/rackstash/formatter_spec.rb b/spec/rackstash/formatter_spec.rb index 09e7fd6..e9085f5 100644 --- a/spec/rackstash/formatter_spec.rb +++ b/spec/rackstash/formatter_spec.rb @@ -46,3 +46,12 @@ describe Rackstash::Formatter do expect(formatter.call('ERROR', Time.now, 'progname', object)).to eql "#{inspected}\n" end end + +describe Rackstash::RawFormatter do + let(:formatter) { Rackstash::RawFormatter.new } + + it 'returns the message' do + msg = 'my message' + expect(formatter.call('ERROR', Time.now, 'progname', msg)).to equal msg + end +end