Merge pull request #3 from aserafin/master

merge Aserafin master
This commit is contained in:
Jules Ivanic 2016-03-08 12:09:05 +01:00
commit 35ff221946
10 changed files with 70 additions and 43 deletions

View file

@ -55,7 +55,7 @@ The `FilterParameters` logger will filter out sensitive parameters from your log
### Logging to file and STDOUT ### Logging to file and STDOUT
You can to file and STDOUT at the same time, you just need to assign new logger You can log to file and STDOUT at the same time, you just need to assign new logger
log_file = File.open('path/to/your/logfile.log', 'a') log_file = File.open('path/to/your/logfile.log', 'a')
log_file.sync = true log_file.sync = true

View file

@ -5,5 +5,7 @@ require 'grape_logging/formatters/json'
require 'grape_logging/loggers/base' require 'grape_logging/loggers/base'
require 'grape_logging/loggers/response' require 'grape_logging/loggers/response'
require 'grape_logging/loggers/filter_parameters' require 'grape_logging/loggers/filter_parameters'
require 'grape_logging/reporters/active_support_reporter'
require 'grape_logging/reporters/logger_reporter'
require 'grape_logging/timings' require 'grape_logging/timings'
require 'grape_logging/middleware/request_logger' require 'grape_logging/middleware/request_logger'

View file

@ -1,9 +1,6 @@
module GrapeLogging module GrapeLogging
module Loggers module Loggers
class Base class Base
def before
end
def parameters(request, response) def parameters(request, response)
{} {}
end end

View file

@ -6,17 +6,19 @@ module GrapeLogging
@replacement = replacement @replacement = replacement
end end
def parameters(request, response) def parameters(request, _)
filtered_parameters = request.params.clone { params: replace_parameters(request.params.clone) }
@filter_parameters.each do |param|
if filtered_parameters[param.to_s]
filtered_parameters[param.to_s] = @replacement
end
end end
{ private
params: filtered_parameters def replace_parameters(parameters)
} parameters.tap do |parameters|
@filter_parameters.each do |parameter_name|
if parameters.key?(parameter_name.to_s)
parameters[parameter_name.to_s] = @replacement
end
end
end
end end
end end
end end

View file

@ -1,14 +1,8 @@
module GrapeLogging module GrapeLogging
module Loggers module Loggers
class Response < GrapeLogging::Loggers::Base class Response < GrapeLogging::Loggers::Base
def parameters(request, response) def parameters(_, response)
if response response ? { response: serialized_response_body(response) } : {}
{
response: serialized_response_body(response)
}
else
{}
end
end end
private private
@ -17,7 +11,7 @@ module GrapeLogging
# It's strange but it's the Grape behavior... # It's strange but it's the Grape behavior...
def serialized_response_body(response) def serialized_response_body(response)
begin begin
response.body.map{ |body| JSON.parse(body) } response.body.map{ |body| JSON.parse(body.to_s) }
rescue => e rescue => e
response.body response.body
end end

View file

@ -11,36 +11,30 @@ module GrapeLogging
def initialize(app, options = {}) def initialize(app, options = {})
super super
if options[:instrumentation_key]
@instrumentation_key = options[:instrumentation_key]
else
@logger = @options[:logger] || Logger.new(STDOUT)
@logger.formatter = @options[:formatter] || GrapeLogging::Formatters::Default.new
end
@included_loggers = @options[:include] || [] @included_loggers = @options[:include] || []
@reporter = if options[:instrumentation_key]
Reporters::ActiveSupportReporter.new(@options[:instrumentation_key])
else
Reporters::LoggerReporter.new(@options[:logger], @options[:formatter])
end
end end
def before def before
reset_db_runtime reset_db_runtime
start_time start_time
@included_loggers.each(&:before)
invoke_included_loggers(:before)
end end
def after def after
stop_time stop_time
params = parameters params = collect_parameters
@included_loggers.each do |included_logger| @reporter.perform(params)
params.merge! included_logger.parameters(request, response) do |key, oldval, newval|
oldval.respond_to?(:merge) ? oldval.merge(newval) : newval invoke_included_loggers(:after)
end
end
if @instrumentation_key
ActiveSupport::Notifications.instrument @instrumentation_key, params
else
@logger.info params
end
@included_loggers.each { |included_logger| included_logger.after if included_logger.respond_to?(:after) }
nil nil
end end
@ -101,6 +95,21 @@ module GrapeLogging
@stop_time ||= Time.now @stop_time ||= Time.now
end end
def collect_parameters
parameters.tap do |params|
@included_loggers.each do |logger|
params.merge! logger.parameters(request, response) do |_, oldval, newval|
oldval.respond_to?(:merge) ? oldval.merge(newval) : newval
end
end
end
end
def invoke_included_loggers(method_name)
@included_loggers.each do |logger|
logger.send(method_name) if logger.respond_to?(method_name)
end
end
end end
end end
end end

View file

@ -0,0 +1,11 @@
module Reporters
class ActiveSupportReporter
def initialize(instrumentation_key)
@instrumentation_key = instrumentation_key
end
def perform(params)
ActiveSupport::Notifications.instrument @instrumentation_key, params
end
end
end

View file

@ -0,0 +1,12 @@
module Reporters
class LoggerReporter
def initialize(logger, formatter)
@logger = logger || Logger.new(STDOUT)
@logger.formatter = formatter || GrapeLogging::Formatters::Default.new
end
def perform(params)
@logger.info params
end
end
end

View file

@ -15,7 +15,7 @@ module GrapeLogging
end end
def append_db_runtime(event) def append_db_runtime(event)
self.db_runtime = event.duration self.db_runtime += event.duration
end end
end end
end end

View file

@ -1,3 +1,3 @@
module GrapeLogging module GrapeLogging
VERSION = '1.1.3' VERSION = '1.2.0'
end end