summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-09-06 22:41:15 -0700
committerStan Hu <stanhu@gmail.com>2017-09-06 23:09:27 -0700
commitf7c8032e0993a6dc6bb808b0f2234324d3fe9707 (patch)
treecd74468cc14fc1955feb0faf705e9d78a4e55e97
parent21935d85382989e38dd4cc12de55966e0c9b6eba (diff)
downloadgitlab-ce-f7c8032e0993a6dc6bb808b0f2234324d3fe9707.tar.gz
Add JSON logger in `log/api_json.log` for Grape API endpoints
Closes #36189
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock3
-rw-r--r--changelogs/unreleased/sh-add-grape-logging.yml5
-rw-r--r--lib/api/api.rb9
-rw-r--r--lib/gitlab/api_logger.rb8
5 files changed, 26 insertions, 0 deletions
diff --git a/Gemfile b/Gemfile
index 0341f2609ad..d5e224c417c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -407,3 +407,4 @@ gem 'flipper-active_record', '~> 0.10.2'
# Structured logging
gem 'lograge', '~> 0.5'
+gem 'grape_logging', '~> 1.6'
diff --git a/Gemfile.lock b/Gemfile.lock
index 320d42b8974..9fc47bbf848 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -355,6 +355,8 @@ GEM
activesupport
grape (>= 0.16.0)
rake
+ grape_logging (1.6.0)
+ grape
grpc (1.4.5)
google-protobuf (~> 3.1)
googleauth (~> 0.5.1)
@@ -1034,6 +1036,7 @@ DEPENDENCIES
grape (~> 1.0)
grape-entity (~> 0.6.0)
grape-route-helpers (~> 2.1.0)
+ grape_logging (~> 1.6)
haml_lint (~> 0.26.0)
hamlit (~> 2.6.1)
hashie-forbidden_attributes
diff --git a/changelogs/unreleased/sh-add-grape-logging.yml b/changelogs/unreleased/sh-add-grape-logging.yml
new file mode 100644
index 00000000000..eaf6cb045d5
--- /dev/null
+++ b/changelogs/unreleased/sh-add-grape-logging.yml
@@ -0,0 +1,5 @@
+---
+title: Add JSON logger in `log/api_json.log` for Grape API endpoints
+merge_request:
+author:
+type: added
diff --git a/lib/api/api.rb b/lib/api/api.rb
index 1405a5d0f0e..63df22c508b 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -2,6 +2,15 @@ module API
class API < Grape::API
include APIGuard
+ LOG_FILENAME = Rails.root.join("log", "api_json.log")
+
+ use GrapeLogging::Middleware::RequestLogger,
+ logger: ::Gitlab::ApiLogger.new(LOG_FILENAME),
+ formatter: GrapeLogging::Formatters::Json.new,
+ include: [ GrapeLogging::Loggers::Response.new,
+ GrapeLogging::Loggers::FilterParameters.new,
+ GrapeLogging::Loggers::ClientEnv.new ]
+
allow_access_with_scope :api
prefix :api
diff --git a/lib/gitlab/api_logger.rb b/lib/gitlab/api_logger.rb
new file mode 100644
index 00000000000..09122b233ea
--- /dev/null
+++ b/lib/gitlab/api_logger.rb
@@ -0,0 +1,8 @@
+module Gitlab
+ class ApiLogger < ::Logger
+
+ def format_message(severity, timestamp, progname, message)
+ super + "\n"
+ end
+ end
+end