From 7e13e968aa96a00bc336a1325b07f996b203b814 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Thu, 23 Apr 2015 15:35:31 -0300 Subject: [PATCH] api: improve api logging --- Gemfile | 1 + lib/noosfero/api/api.rb | 12 +++++++++--- lib/noosfero/api/helpers.rb | 13 +------------ lib/noosfero/api/request_logger.rb | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 lib/noosfero/api/request_logger.rb diff --git a/Gemfile b/Gemfile index e681f75..6e61d7c 100644 --- a/Gemfile +++ b/Gemfile @@ -22,6 +22,7 @@ gem 'eita-jrails', '>= 0.9.5', :require => 'jrails' gem 'grape', '~> 0.11.0' gem 'grape-entity' gem 'grape-swagger' +gem 'grape_logging' gem 'rack-cors' gem 'rack-contrib' diff --git a/lib/noosfero/api/api.rb b/lib/noosfero/api/api.rb index 5da45c1..fd6db3d 100644 --- a/lib/noosfero/api/api.rb +++ b/lib/noosfero/api/api.rb @@ -6,12 +6,18 @@ module Noosfero class API < Grape::API use Rack::JSONP - before { start_log } + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) + logger.formatter = GrapeLogging::Formatters::Default.new + use RequestLogger, { logger: logger } + + rescue_from :all do |e| + logger.error e + end + before { setup_multitenancy } before { detect_stuff_by_domain } - after { end_log } after { set_session_cookie } - + version 'v1' prefix "api" format :json diff --git a/lib/noosfero/api/helpers.rb b/lib/noosfero/api/helpers.rb index 00fbf3d..14ab098 100644 --- a/lib/noosfero/api/helpers.rb +++ b/lib/noosfero/api/helpers.rb @@ -3,11 +3,7 @@ module Noosfero module APIHelpers PRIVATE_TOKEN_PARAM = :private_token ALLOWED_PARAMETERS = ['parent_id', 'from', 'until', 'content_type'] - - def logger - @logger ||= Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV']}_api.log")) - end - + def current_user private_token = (params[PRIVATE_TOKEN_PARAM] || headers['Private-Token'] || cookies['_noosfero_api_session']).to_s if params @current_user ||= User.find_by_private_token(private_token) @@ -151,13 +147,6 @@ module Noosfero cookies['_noosfero_api_session'] = { value: @current_user.private_token, httponly: true } if @current_user.present? end - def start_log - logger.info "Started #{request.path} #{request.params.except('password')}" - end - def end_log - logger.info "Completed #{request.path}" - end - def setup_multitenancy Noosfero::MultiTenancy.setup!(request.host) end diff --git a/lib/noosfero/api/request_logger.rb b/lib/noosfero/api/request_logger.rb new file mode 100644 index 0000000..ac30aba --- /dev/null +++ b/lib/noosfero/api/request_logger.rb @@ -0,0 +1,18 @@ +module Noosfero + module API + class RequestLogger < GrapeLogging::Middleware::RequestLogger + + protected + + def parameters(response, duration) + { + path: request.path, + params: request.params.except('password'), + method: request.request_method, + total: (duration * 1000).round(2), + db: request.env[:db_duration].round(2), + } + end + end + end +end -- libgit2 0.21.2