From add6aa343a375e59f79006e02e06b325c1f157a6 Mon Sep 17 00:00:00 2001 From: zimski Date: Tue, 30 Jan 2018 17:33:54 +0100 Subject: [PATCH 1/5] add posted body in log output and improve tests --- json-commonlogger.gemspec | 2 +- lib/rack/json-commonlogger.rb | 3 +++ spec/rack/json-commonlogger_spec.rb | 28 ++++++++++++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/json-commonlogger.gemspec b/json-commonlogger.gemspec index f51b69d..5bfa0c2 100644 --- a/json-commonlogger.gemspec +++ b/json-commonlogger.gemspec @@ -17,5 +17,5 @@ Gem::Specification.new do |gem| gem.add_dependency 'yajl-ruby' gem.add_development_dependency 'bundler' gem.add_development_dependency 'rspec' - gem.add_development_dependency 'debugger' + gem.add_development_dependency 'byebug' end diff --git a/lib/rack/json-commonlogger.rb b/lib/rack/json-commonlogger.rb index ef9024b..045244f 100644 --- a/lib/rack/json-commonlogger.rb +++ b/lib/rack/json-commonlogger.rb @@ -32,6 +32,8 @@ def log(env, status, header, began_at) length = extract_content_length(header) logger = @logger || env['rack.errors'] + body = env["rack.input"].read + log = { :host => env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-", :user => env["REMOTE_USER"] || "-", @@ -39,6 +41,7 @@ def log(env, status, header, began_at) :method => env["REQUEST_METHOD"], :path => env["PATH_INFO"], :query => env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"], + :body_data => body.empty? ? "" : body, :version => env["HTTP_VERSION"], :status => status.to_s[0..3], :length => length, diff --git a/spec/rack/json-commonlogger_spec.rb b/spec/rack/json-commonlogger_spec.rb index ad5b9a0..6548d90 100644 --- a/spec/rack/json-commonlogger_spec.rb +++ b/spec/rack/json-commonlogger_spec.rb @@ -13,7 +13,7 @@ def json_commonlogger(app) end def json_custom_commonlogger(app) - Rack::Lint.new(Rack::JsonCommonLogger.new(app, @logger) {|log| {'foo' => 'bar'}}) + Rack::Lint.new(Rack::JsonCommonLogger.new(app, @logger)) end it 'writes to the log' do @@ -32,7 +32,31 @@ def json_custom_commonlogger(app) lambda{|env| [200, {'Content-Type' => 'text/plain'}, ['Hello Rack::JsonCommonLogger']] } )) - @logger.should_receive(:write).with(Yajl::Encoder.encode({'foo' => 'bar'})) + @logger.should_receive(:write) do |log| + log_decoded = Yajl::Parser.new.parse(log) + log_decoded['method'].should eq('GET') + log_decoded['status'].should eq("200") + log_decoded['path'].should eq('/') + log_decoded['length'].should eq("-") + log_decoded['body_data'].should eq('') + end req.get('/') end + + it 'writes a custom log with post data' do + req = Rack::MockRequest.new( + json_custom_commonlogger( + lambda{|env| [200, {'Content-Type' => 'text/plain'}, ['Hello Rack::JsonCommonLogger']] } + )) + + @logger.should_receive(:write) do |log| + log_decoded = Yajl::Parser.new.parse(log) + log_decoded['method'].should eq('POST') + log_decoded['status'].should eq("200") + log_decoded['path'].should eq('/') + log_decoded['length'].should eq("-") + log_decoded['body_data'].should eq('message=hello') + end + req.post('/', :params => {:message => 'hello'}) + end end From b9d794f18d3ca20a3f2eb8ea3afed1d792e9474d Mon Sep 17 00:00:00 2001 From: Anthony BARRE Date: Mon, 28 Nov 2022 18:07:14 +0100 Subject: [PATCH 2/5] Improve json logging in production Add request_id and don't log on / --- lib/rack/json-commonlogger.rb | 40 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/rack/json-commonlogger.rb b/lib/rack/json-commonlogger.rb index 045244f..1d95841 100644 --- a/lib/rack/json-commonlogger.rb +++ b/lib/rack/json-commonlogger.rb @@ -34,24 +34,28 @@ def log(env, status, header, began_at) logger = @logger || env['rack.errors'] body = env["rack.input"].read - log = { - :host => env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-", - :user => env["REMOTE_USER"] || "-", - :time => now.strftime("%d/%b/%Y %H:%M:%S"), - :method => env["REQUEST_METHOD"], - :path => env["PATH_INFO"], - :query => env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"], - :body_data => body.empty? ? "" : body, - :version => env["HTTP_VERSION"], - :status => status.to_s[0..3], - :length => length, - :duration => now - began_at - } - - log = @custom_log.call(log, status, header, env) if @custom_log - - logger.write(Yajl::Encoder.encode(log)) - logger.write("\n") + @db = Thread.current + if (env["PATH_INFO"] != '/') + log = { + :host => env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-", + :user => env["REMOTE_USER"] || "-", + :time => now.strftime("%d/%b/%Y %H:%M:%S"), + :method => env["REQUEST_METHOD"], + :path => env["PATH_INFO"], + :query => env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"], + :body_data => body.empty? ? "" : body, + :version => env["HTTP_VERSION"], + :status => status.to_s[0..3], + :length => length, + :duration => now - began_at, + :request_id => @db[:request_id] + } + + log = @custom_log.call(log, status, header, env) if @custom_log + + logger.write(Yajl::Encoder.encode(log)) + logger.write("\n") + end end def extract_content_length(headers) From 6bbf26d0d4fd8114474a80688de079378584710e Mon Sep 17 00:00:00 2001 From: Anthony BARRE Date: Tue, 29 Nov 2022 12:03:43 +0100 Subject: [PATCH 3/5] Update json-commonlogger.rb --- lib/rack/json-commonlogger.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/rack/json-commonlogger.rb b/lib/rack/json-commonlogger.rb index 1d95841..0d82ba5 100644 --- a/lib/rack/json-commonlogger.rb +++ b/lib/rack/json-commonlogger.rb @@ -48,7 +48,9 @@ def log(env, status, header, began_at) :status => status.to_s[0..3], :length => length, :duration => now - began_at, - :request_id => @db[:request_id] + :request_id => @db[:request_id], + :log_level => 'INFO', + :message => "#{env["REQUEST_METHOD"]} #{env["PATH_INFO"]}#{env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"]} #{status.to_s[0..3]} #{now - began_at}" } log = @custom_log.call(log, status, header, env) if @custom_log From 2cc5fe6f23eae3557976e01426af2e93bb6a562d Mon Sep 17 00:00:00 2001 From: Anthony BARRE Date: Wed, 30 Nov 2022 12:26:06 +0100 Subject: [PATCH 4/5] Update json-commonlogger.rb --- lib/rack/json-commonlogger.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rack/json-commonlogger.rb b/lib/rack/json-commonlogger.rb index 0d82ba5..aacf128 100644 --- a/lib/rack/json-commonlogger.rb +++ b/lib/rack/json-commonlogger.rb @@ -35,7 +35,7 @@ def log(env, status, header, began_at) body = env["rack.input"].read @db = Thread.current - if (env["PATH_INFO"] != '/') + if (env["PATH_INFO"] != '/ping-fstrz') log = { :host => env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-", :user => env["REMOTE_USER"] || "-", From 9afca9ef3075a3a85c3335866ebba07f4e7f46e4 Mon Sep 17 00:00:00 2001 From: Anthony BARRE Date: Thu, 1 Dec 2022 09:41:56 +0100 Subject: [PATCH 5/5] avoid time field to avoid elasticsearch error --- lib/rack/json-commonlogger.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/rack/json-commonlogger.rb b/lib/rack/json-commonlogger.rb index aacf128..7805a85 100644 --- a/lib/rack/json-commonlogger.rb +++ b/lib/rack/json-commonlogger.rb @@ -39,7 +39,6 @@ def log(env, status, header, began_at) log = { :host => env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-", :user => env["REMOTE_USER"] || "-", - :time => now.strftime("%d/%b/%Y %H:%M:%S"), :method => env["REQUEST_METHOD"], :path => env["PATH_INFO"], :query => env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"],