Merge branch 'sh-add-grape-logging' into 'master'
Add JSON logger in `log/api_json.log` for Grape API endpoints Closes #36189 See merge request !14102
This commit is contained in:
commit
7e19b5bfb6
5 changed files with 39 additions and 0 deletions
1
Gemfile
1
Gemfile
|
@ -407,3 +407,4 @@ gem 'flipper-active_record', '~> 0.10.2'
|
|||
|
||||
# Structured logging
|
||||
gem 'lograge', '~> 0.5'
|
||||
gem 'grape_logging', '~> 1.6'
|
||||
|
|
|
@ -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)
|
||||
|
@ -1035,6 +1037,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
|
||||
|
|
5
changelogs/unreleased/sh-add-grape-logging.yml
Normal file
5
changelogs/unreleased/sh-add-grape-logging.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add JSON logger in `log/api_json.log` for Grape API endpoints
|
||||
merge_request:
|
||||
author:
|
||||
type: added
|
|
@ -2,6 +2,17 @@ module API
|
|||
class API < Grape::API
|
||||
include APIGuard
|
||||
|
||||
LOG_FILENAME = Rails.root.join("log", "api_json.log")
|
||||
|
||||
use GrapeLogging::Middleware::RequestLogger,
|
||||
logger: Logger.new(LOG_FILENAME),
|
||||
formatter: Gitlab::GrapeLogging::Formatters::LogrageWithTimestamp.new,
|
||||
include: [
|
||||
GrapeLogging::Loggers::Response.new,
|
||||
GrapeLogging::Loggers::FilterParameters.new,
|
||||
GrapeLogging::Loggers::ClientEnv.new
|
||||
]
|
||||
|
||||
allow_access_with_scope :api
|
||||
prefix :api
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
module Gitlab
|
||||
module GrapeLogging
|
||||
module Formatters
|
||||
class LogrageWithTimestamp
|
||||
def call(severity, datetime, _, data)
|
||||
time = data.delete :time
|
||||
attributes = {
|
||||
time: datetime.utc.iso8601(3),
|
||||
severity: severity,
|
||||
duration: time[:total],
|
||||
db: time[:db],
|
||||
view: time[:view]
|
||||
}.merge(data)
|
||||
::Lograge.formatter.call(attributes) + "\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue