Skip to content

Commit 78cf0af

Browse files
author
David Roy
committed
inital version
1 parent 3116338 commit 78cf0af

File tree

7 files changed

+58
-31
lines changed

7 files changed

+58
-31
lines changed

.rspec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
--color
2+
--format documentation

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
source 'https://rubygems.org'
22

3-
# Specify your gem's dependencies in grape-middleware-logger.gemspec
3+
# Specify your gem's dependencies in grape-middleware-logstasher.gemspec
44
gemspec

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
If you wanna use this gem, you'll need to be running Grape master [#dd0cae27](https://github.com/intridea/grape/commit/dd0cae274ee0017a22deef5e282b75cf25d65385) (April 30) or later. Otherwise, you'll have to wait for the release of 0.12.0
55

6+
## Cabbit Version
7+
This version is for providing these logs to logstash.
8+
69
## Installation
710

811
Add this line to your application's Gemfile:

grape-middleware-logger.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ Gem::Specification.new do |spec|
77
spec.name = 'grape-middleware-logger'
88
spec.version = Grape::Middleware::Logger::VERSION
99
spec.platform = Gem::Platform::RUBY
10-
spec.authors = ['Ryan Buckley']
11-
spec.email = ['[email protected]']
10+
spec.authors = ['Ryan Buckley', 'David Roy']
11+
1212
spec.summary = %q{A logger for the Grape framework}
1313
spec.description = %q{Logging middleware for the Grape framework, similar to what Rails offers}
1414
spec.homepage = ''

lib/grape/middleware/logger.rb

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,43 @@
11
require 'logger'
22
require 'grape/middleware/globals'
3+
require 'grape/middleware/logger/version'
34

4-
# avoid superclass mismatch when version file gets loaded first
55
Grape::Middleware.send :remove_const, :Logger if defined? Grape::Middleware::Logger
66
module Grape
77
module Middleware
88
class Logger < Grape::Middleware::Globals
99

10+
def log
11+
@log ||= {
12+
'timestamp' => start_time.iso8601,
13+
'application' => '',
14+
'service' => '',
15+
'fields'=> {
16+
'method' => env['grape.request'].request_method,
17+
'resource' => env['grape.request'].path,
18+
'params' => parameters
19+
},
20+
'status_code' => '',
21+
'completed_in' => '',
22+
'errors' => ''
23+
}
24+
end
25+
1026
def before
1127
start_time
1228
super
13-
logger.info ''
14-
logger.info %Q(Started #{env['grape.request'].request_method} "#{env['grape.request'].path}")
15-
logger.info %Q( Parameters: #{parameters})
1629
end
1730

1831
def call!(env)
1932
@env = env
2033
before
2134
error = catch(:error) { @app_response = @app.call(@env); nil }
2235
if error.nil?
23-
after(@app_response.first)
36+
if @app_response.respond_to?(:first)
37+
after(@app_response.first)
38+
else
39+
after(@app_response)
40+
end
2441
else
2542
after_failure(error)
2643
throw(:error, error)
@@ -29,16 +46,17 @@ def call!(env)
2946
end
3047

3148
def after(status)
32-
logger.info "Completed #{status} in #{((Time.now - start_time) * 1000).round(2)}ms"
33-
logger.info ''
49+
log['status_code'] = status.to_s
50+
log['completed_in'] = "#{((Time.now.utc - start_time) * 1000).round(2)}ms"
51+
logger.info log
3452
end
3553

3654
#
3755
# Helpers
3856
#
3957

4058
def after_failure(error)
41-
logger.info %Q( Error: #{error[:message]}) if error[:message]
59+
log['errors'] = %Q(Error: #{error[:message]}) if error[:message]
4260
after(error[:status])
4361
end
4462

@@ -53,7 +71,7 @@ def parameters
5371
end
5472

5573
def start_time
56-
@start_time ||= Time.now
74+
@start_time ||= Time.now.utc
5775
end
5876

5977
def logger
@@ -62,5 +80,3 @@ def logger
6280
end
6381
end
6482
end
65-
66-
require 'grape/middleware/logger/version'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Grape
22
module Middleware
33
class Logger
4-
VERSION = '0.1.2'
4+
VERSION = '0.0.1'
55
end
66
end
77
end

spec/lib/grape/middleware/logger_spec.rb

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,29 @@
5353
end
5454

5555
describe 'integration' do
56-
it 'properly logs requests', pending: 'Grape v0.12.0' do
56+
let(:timestamp) { Time.now.utc.iso8601 }
57+
let(:log) do
58+
{
59+
'timestamp' => timestamp,
60+
'application' => 'Cabbit',
61+
'service' => 'Cabbit_v1',
62+
'fields' => {
63+
'method' => 'POST',
64+
'resource' => '/api/1.0/users',
65+
'params' => {
66+
'id' => '101001',
67+
'name' => 'foo',
68+
'password' => '[FILTERED]'
69+
}
70+
},
71+
'status_code' => '200',
72+
'completed_in'=> /\d.\d+ms/,
73+
'errors' => ''
74+
}
75+
end
76+
it 'properly logs requests' do
5777
expect(app).to receive(:call).with(env).and_return(app_response)
58-
expect(subject.logger).to receive(:info).with('')
59-
expect(subject.logger).to receive(:info).with(%Q(Started POST "/api/1.0/users"))
60-
expect(subject.logger).to receive(:info).with(%Q( Parameters: {"id"=>"101001", "name"=>"foo", "password"=>"[FILTERED]"}))
61-
expect(subject.logger).to receive(:info).with(/Completed 200 in \d.\d+ms/)
62-
expect(subject.logger).to receive(:info).with('')
78+
expect(subject.logger).to receive(:info).with(log)
6379
subject.call!(env)
6480
end
6581
end
@@ -72,16 +88,6 @@
7288
expect(subject).to receive(:after).with(403)
7389
subject.after_failure(error)
7490
end
75-
76-
context 'when :message is set in the error object' do
77-
let(:error) { { message: 'Oops, not found' } }
78-
79-
it 'logs the error message' do
80-
allow(subject).to receive(:after)
81-
expect(subject.logger).to receive(:info).with(Regexp.new(error[:message]))
82-
subject.after_failure(error)
83-
end
84-
end
8591
end
8692

8793
describe '#parameters' do

0 commit comments

Comments
 (0)