From 06ede1de02070f603b8c1c6ba8c837dd06feaf1d Mon Sep 17 00:00:00 2001 From: David Jones Date: Mon, 29 Jan 2018 18:18:08 -0500 Subject: [PATCH 1/3] Allow logging of specified environment variables. --- README.rdoc | 4 ++++ lib/oink/middleware.rb | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/README.rdoc b/README.rdoc index 1d80c1b..8702874 100644 --- a/README.rdoc +++ b/README.rdoc @@ -64,6 +64,10 @@ For activerecord instantiation counts only: Rails.application.middleware.use( Oink::Middleware, :instruments => :activerecord ) +Environment variables can also be logged by specifying `env_vars`. This is especially handy for displaying request ID or REQUEST_URI from the Rails `env` object. + + Rails.application.middleware.use( Oink::Middleware, :env_vars => ['action_dispatch.request_id', 'REQUEST_ID'] ) + Note that the previous way of configuring oink, as a set of modules to include into rails controllers, is deprecated. == Analyzing logs diff --git a/lib/oink/middleware.rb b/lib/oink/middleware.rb index 2b08b4f..8f5b0e0 100644 --- a/lib/oink/middleware.rb +++ b/lib/oink/middleware.rb @@ -9,6 +9,7 @@ def initialize(app, options = {}) @app = app @logger = options[:logger] || Hodel3000CompliantLogger.new("log/oink.log") @instruments = options[:instruments] ? Array(options[:instruments]) : [:memory, :activerecord] + @env_vars = options[:env_vars] ? Array(options[:env_vars]) : [] Oink.extend_active_record! if @instruments.include?(:activerecord) end @@ -17,6 +18,7 @@ def call(env) status, headers, body = @app.call(env) log_routing(env) + log_environment(env) log_memory log_activerecord log_completed @@ -36,6 +38,15 @@ def log_routing(env) end end + def log_environment(env) + return if @env_vars.empty? + env_message = @env_vars.map { |key| + value = env[key] + "#{key.inspect}: #{value.inspect if value && value.respond_to?(:inspect)}" + }.join(', ') + @logger.info("Environment: {#{env_message}}") + end + def log_memory if @instruments.include?(:memory) memory = Oink::Instrumentation::MemorySnapshot.memory From 2039ec537196992a6a1f4891eef55d967671da1b Mon Sep 17 00:00:00 2001 From: David Jones Date: Tue, 30 Jan 2018 09:55:19 -0500 Subject: [PATCH 2/3] Style changes to please CI. --- lib/oink/middleware.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/oink/middleware.rb b/lib/oink/middleware.rb index 8f5b0e0..7c7d057 100644 --- a/lib/oink/middleware.rb +++ b/lib/oink/middleware.rb @@ -40,10 +40,11 @@ def log_routing(env) def log_environment(env) return if @env_vars.empty? - env_message = @env_vars.map { |key| + env_message = @env_vars.map do |key| value = env[key] - "#{key.inspect}: #{value.inspect if value && value.respond_to?(:inspect)}" - }.join(', ') + display_value = value.inspect if value && value.respond_to?(:inspect) + "#{key.inspect}: #{display_value}" + end.join(', ') @logger.info("Environment: {#{env_message}}") end From bc304dfbc90fcff4ffaba922cac47ade8650a7ea Mon Sep 17 00:00:00 2001 From: David Jones Date: Tue, 30 Jan 2018 09:55:46 -0500 Subject: [PATCH 3/3] Add spec for env_vars logging behavior. --- spec/oink/middleware_spec.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spec/oink/middleware_spec.rb b/spec/oink/middleware_spec.rb index 7f04bd7..026bc15 100644 --- a/spec/oink/middleware_spec.rb +++ b/spec/oink/middleware_spec.rb @@ -58,6 +58,17 @@ def call(env) end end + context "include specified environment variables in the oink log" do + let(:app) do + Oink::Middleware.new(SampleApplication.new, :logger => logger, :env_vars => ['action_dispatch.request_id']) + end + + it "includes specified environment variables" do + get "/no_pigs", {}, {"action_dispatch.request_id" => "4cc822f8-0d85-4d80-bcae-d94a4567e06c"} + log_output.string.should include('Environment: {"action_dispatch.request_id": "4cc822f8-0d85-4d80-bcae-d94a4567e06c"}') + end + end + it "reports 0 totals" do get "/no_pigs" log_output.string.should include("Instantiation Breakdown: Total: 0")