log_toolbox 1.0.0 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +3 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +89 -19
- data/README.md +31 -6
- data/bitbucket-pipelines.yml +4 -2
- data/config/routes.rb +3 -0
- data/lib/log_toolbox.rb +2 -0
- data/lib/log_toolbox/log_controller.rb +53 -0
- data/lib/log_toolbox/log_helper.rb +8 -4
- data/lib/log_toolbox/log_payload.rb +3 -2
- data/lib/log_toolbox/log_routes.rb +15 -0
- data/lib/log_toolbox/log_simple.rb +6 -2
- data/lib/log_toolbox/lograge_config.rb +60 -19
- data/lib/log_toolbox/version.rb +1 -1
- data/log_toolbox.gemspec +18 -13
- metadata +60 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 24e688450de60928e21dffc4f149fad36b8fdcccbc99c66a7490f8a7c120f26e
|
|
4
|
+
data.tar.gz: 906faf4de7058fd15a773dfd1e329642a912e09c4c7b7a7cebdf7d69f395be87
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3306c7347f81a106a9d591c56462b9cd63edde7247a6c66ae0137eebda42dcb0db491e37415e71cf917248c1a7f2a389eb423642d9bf820bd809f590ce0ecbbb
|
|
7
|
+
data.tar.gz: d4aeec51d7a437a6124b64d15ed502cea87ec9f52780abc9f9959cd884e2a52724040104a130668c1d170c10831bd95d6b3243841fb22365d17e8d9fc71afff8
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -6,3 +6,27 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
6
6
|
|
|
7
7
|
## [Released] - 2019-05-21
|
|
8
8
|
|
|
9
|
+
## [1.3.3] - 2020-11-25
|
|
10
|
+
### Added
|
|
11
|
+
- Parametrize logstash protocol
|
|
12
|
+
- Refactor request logs
|
|
13
|
+
|
|
14
|
+
## [1.3.2] - 2020-02-19
|
|
15
|
+
### Fixed
|
|
16
|
+
- Fixed log simple sending to logstash
|
|
17
|
+
|
|
18
|
+
## [1.3.1] - 2019-07-30
|
|
19
|
+
### Fixed
|
|
20
|
+
- Missed log format on posting to logstash
|
|
21
|
+
|
|
22
|
+
## [1.3.0] - 2019-07-30
|
|
23
|
+
### Added
|
|
24
|
+
- Add feature to send log to logstash at stanging and production environment
|
|
25
|
+
|
|
26
|
+
## [1.2.0] - 2019-07-24
|
|
27
|
+
### Added
|
|
28
|
+
- Add feature to change log level of your application at running time
|
|
29
|
+
|
|
30
|
+
## [1.1.0] - 2019-05-30
|
|
31
|
+
### Changed
|
|
32
|
+
- Changed header correlation_id to activityID as requested by architecture team
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
log_toolbox (1.
|
|
5
|
-
actionpack (>= 4.0.0)
|
|
6
|
-
activesupport (>= 4.0.0)
|
|
4
|
+
log_toolbox (1.3.3)
|
|
7
5
|
lograge (>= 0.11.1)
|
|
8
6
|
logstash-event (>= 1.2.02)
|
|
7
|
+
logstash-logger (>= 0.26.1)
|
|
8
|
+
rails (>= 4.0)
|
|
9
|
+
rspec (>= 3.0.0)
|
|
10
|
+
rspec-rails
|
|
9
11
|
|
|
10
12
|
GEM
|
|
11
13
|
remote: https://rubygems.org/
|
|
12
14
|
specs:
|
|
15
|
+
actioncable (5.2.3)
|
|
16
|
+
actionpack (= 5.2.3)
|
|
17
|
+
nio4r (~> 2.0)
|
|
18
|
+
websocket-driver (>= 0.6.1)
|
|
19
|
+
actionmailer (5.2.3)
|
|
20
|
+
actionpack (= 5.2.3)
|
|
21
|
+
actionview (= 5.2.3)
|
|
22
|
+
activejob (= 5.2.3)
|
|
23
|
+
mail (~> 2.5, >= 2.5.4)
|
|
24
|
+
rails-dom-testing (~> 2.0)
|
|
13
25
|
actionpack (5.2.3)
|
|
14
26
|
actionview (= 5.2.3)
|
|
15
27
|
activesupport (= 5.2.3)
|
|
@@ -23,11 +35,25 @@ GEM
|
|
|
23
35
|
erubi (~> 1.4)
|
|
24
36
|
rails-dom-testing (~> 2.0)
|
|
25
37
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
|
38
|
+
activejob (5.2.3)
|
|
39
|
+
activesupport (= 5.2.3)
|
|
40
|
+
globalid (>= 0.3.6)
|
|
41
|
+
activemodel (5.2.3)
|
|
42
|
+
activesupport (= 5.2.3)
|
|
43
|
+
activerecord (5.2.3)
|
|
44
|
+
activemodel (= 5.2.3)
|
|
45
|
+
activesupport (= 5.2.3)
|
|
46
|
+
arel (>= 9.0)
|
|
47
|
+
activestorage (5.2.3)
|
|
48
|
+
actionpack (= 5.2.3)
|
|
49
|
+
activerecord (= 5.2.3)
|
|
50
|
+
marcel (~> 0.3.1)
|
|
26
51
|
activesupport (5.2.3)
|
|
27
52
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
28
53
|
i18n (>= 0.7, < 2)
|
|
29
54
|
minitest (~> 5.1)
|
|
30
55
|
tzinfo (~> 1.1)
|
|
56
|
+
arel (9.0.0)
|
|
31
57
|
ast (2.4.0)
|
|
32
58
|
builder (3.2.3)
|
|
33
59
|
byebug (11.0.1)
|
|
@@ -36,21 +62,32 @@ GEM
|
|
|
36
62
|
crass (1.0.4)
|
|
37
63
|
diff-lcs (1.3)
|
|
38
64
|
erubi (1.8.0)
|
|
65
|
+
globalid (0.4.2)
|
|
66
|
+
activesupport (>= 4.2.0)
|
|
39
67
|
i18n (1.6.0)
|
|
40
68
|
concurrent-ruby (~> 1.0)
|
|
41
69
|
jaro_winkler (1.5.2)
|
|
42
|
-
lograge (0.11.
|
|
70
|
+
lograge (0.11.2)
|
|
43
71
|
actionpack (>= 4)
|
|
44
72
|
activesupport (>= 4)
|
|
45
73
|
railties (>= 4)
|
|
46
74
|
request_store (~> 1.0)
|
|
47
75
|
logstash-event (1.2.02)
|
|
76
|
+
logstash-logger (0.26.1)
|
|
77
|
+
logstash-event (~> 1.2)
|
|
48
78
|
loofah (2.2.3)
|
|
49
79
|
crass (~> 1.0.2)
|
|
50
80
|
nokogiri (>= 1.5.9)
|
|
81
|
+
mail (2.7.1)
|
|
82
|
+
mini_mime (>= 0.1.1)
|
|
83
|
+
marcel (0.3.3)
|
|
84
|
+
mimemagic (~> 0.3.2)
|
|
51
85
|
method_source (0.9.2)
|
|
86
|
+
mimemagic (0.3.5)
|
|
87
|
+
mini_mime (1.0.2)
|
|
52
88
|
mini_portile2 (2.4.0)
|
|
53
89
|
minitest (5.11.3)
|
|
90
|
+
nio4r (2.5.4)
|
|
54
91
|
nokogiri (1.10.3)
|
|
55
92
|
mini_portile2 (~> 2.4.0)
|
|
56
93
|
parallel (1.17.0)
|
|
@@ -65,6 +102,19 @@ GEM
|
|
|
65
102
|
rack (2.0.7)
|
|
66
103
|
rack-test (1.1.0)
|
|
67
104
|
rack (>= 1.0, < 3)
|
|
105
|
+
rails (5.2.3)
|
|
106
|
+
actioncable (= 5.2.3)
|
|
107
|
+
actionmailer (= 5.2.3)
|
|
108
|
+
actionpack (= 5.2.3)
|
|
109
|
+
actionview (= 5.2.3)
|
|
110
|
+
activejob (= 5.2.3)
|
|
111
|
+
activemodel (= 5.2.3)
|
|
112
|
+
activerecord (= 5.2.3)
|
|
113
|
+
activestorage (= 5.2.3)
|
|
114
|
+
activesupport (= 5.2.3)
|
|
115
|
+
bundler (>= 1.3.0)
|
|
116
|
+
railties (= 5.2.3)
|
|
117
|
+
sprockets-rails (>= 2.0.0)
|
|
68
118
|
rails-dom-testing (2.0.3)
|
|
69
119
|
activesupport (>= 4.2.0)
|
|
70
120
|
nokogiri (>= 1.6)
|
|
@@ -77,50 +127,70 @@ GEM
|
|
|
77
127
|
rake (>= 0.8.7)
|
|
78
128
|
thor (>= 0.19.0, < 2.0)
|
|
79
129
|
rainbow (3.0.0)
|
|
80
|
-
rake (
|
|
81
|
-
request_store (1.
|
|
130
|
+
rake (12.3.2)
|
|
131
|
+
request_store (1.5.0)
|
|
82
132
|
rack (>= 1.4)
|
|
83
133
|
rspec (3.8.0)
|
|
84
134
|
rspec-core (~> 3.8.0)
|
|
85
135
|
rspec-expectations (~> 3.8.0)
|
|
86
136
|
rspec-mocks (~> 3.8.0)
|
|
87
|
-
rspec-core (3.8.
|
|
137
|
+
rspec-core (3.8.2)
|
|
88
138
|
rspec-support (~> 3.8.0)
|
|
89
|
-
rspec-expectations (3.8.
|
|
139
|
+
rspec-expectations (3.8.4)
|
|
90
140
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
91
141
|
rspec-support (~> 3.8.0)
|
|
92
|
-
rspec-mocks (3.8.
|
|
142
|
+
rspec-mocks (3.8.1)
|
|
93
143
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
94
144
|
rspec-support (~> 3.8.0)
|
|
95
|
-
rspec-
|
|
96
|
-
|
|
145
|
+
rspec-rails (3.8.2)
|
|
146
|
+
actionpack (>= 3.0)
|
|
147
|
+
activesupport (>= 3.0)
|
|
148
|
+
railties (>= 3.0)
|
|
149
|
+
rspec-core (~> 3.8.0)
|
|
150
|
+
rspec-expectations (~> 3.8.0)
|
|
151
|
+
rspec-mocks (~> 3.8.0)
|
|
152
|
+
rspec-support (~> 3.8.0)
|
|
153
|
+
rspec-support (3.8.2)
|
|
154
|
+
rubocop (0.71.0)
|
|
97
155
|
jaro_winkler (~> 1.5.1)
|
|
98
156
|
parallel (~> 1.10)
|
|
99
|
-
parser (>= 2.
|
|
157
|
+
parser (>= 2.6)
|
|
100
158
|
rainbow (>= 2.2.2, < 4.0)
|
|
101
159
|
ruby-progressbar (~> 1.7)
|
|
102
|
-
unicode-display_width (>= 1.4.0, < 1.
|
|
103
|
-
ruby-progressbar (1.10.
|
|
104
|
-
shoulda-matchers (3.1.
|
|
160
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
|
161
|
+
ruby-progressbar (1.10.1)
|
|
162
|
+
shoulda-matchers (3.1.3)
|
|
105
163
|
activesupport (>= 4.0.0)
|
|
164
|
+
sprockets (4.0.2)
|
|
165
|
+
concurrent-ruby (~> 1.0)
|
|
166
|
+
rack (> 1, < 3)
|
|
167
|
+
sprockets-rails (3.2.2)
|
|
168
|
+
actionpack (>= 4.0)
|
|
169
|
+
activesupport (>= 4.0)
|
|
170
|
+
sprockets (>= 3.0.0)
|
|
171
|
+
sqlite3 (1.4.1)
|
|
106
172
|
thor (0.20.3)
|
|
107
173
|
thread_safe (0.3.6)
|
|
108
174
|
tzinfo (1.2.5)
|
|
109
175
|
thread_safe (~> 0.1)
|
|
110
|
-
unicode-display_width (1.
|
|
176
|
+
unicode-display_width (1.6.0)
|
|
177
|
+
websocket-driver (0.7.3)
|
|
178
|
+
websocket-extensions (>= 0.1.0)
|
|
179
|
+
websocket-extensions (0.1.5)
|
|
111
180
|
|
|
112
181
|
PLATFORMS
|
|
113
182
|
ruby
|
|
114
183
|
|
|
115
184
|
DEPENDENCIES
|
|
116
|
-
bundler
|
|
185
|
+
bundler
|
|
117
186
|
log_toolbox!
|
|
118
187
|
pry
|
|
119
188
|
pry-byebug
|
|
120
|
-
rake
|
|
121
|
-
rspec
|
|
189
|
+
rake
|
|
190
|
+
rspec-rails
|
|
122
191
|
rubocop
|
|
123
192
|
shoulda-matchers (~> 3.1)
|
|
193
|
+
sqlite3
|
|
124
194
|
|
|
125
195
|
BUNDLED WITH
|
|
126
196
|
2.0.1
|
data/README.md
CHANGED
|
@@ -4,10 +4,6 @@ Ruby gem for logging
|
|
|
4
4
|
=======
|
|
5
5
|
# LogToolbox
|
|
6
6
|
|
|
7
|
-
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/log_toolbox`. To experiment with that code, run `bin/console` for an interactive prompt.
|
|
8
|
-
|
|
9
|
-
TODO: Delete this and the text above, and describe your gem
|
|
10
|
-
|
|
11
7
|
## Installation
|
|
12
8
|
|
|
13
9
|
Add this line to your application's Gemfile:
|
|
@@ -26,7 +22,7 @@ $ gem install log_toolbox
|
|
|
26
22
|
|
|
27
23
|
## Usage
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
Add this line at the end of your 'config/application.rb'
|
|
30
26
|
|
|
31
27
|
```ruby
|
|
32
28
|
LogToolbox::LogrageConfig.configure
|
|
@@ -40,6 +36,14 @@ class ApplicationController < ActionController::API
|
|
|
40
36
|
end
|
|
41
37
|
```
|
|
42
38
|
|
|
39
|
+
Add these keys at your '.env' file
|
|
40
|
+
|
|
41
|
+
```ruby
|
|
42
|
+
# Logstash
|
|
43
|
+
LOGSTASH_URL=utils-hml.aws.guideinvestimentos.com.br
|
|
44
|
+
LOGSTASH_PORT=5001
|
|
45
|
+
```
|
|
46
|
+
|
|
43
47
|
Now your application log was converted to json pattern.
|
|
44
48
|
|
|
45
49
|
### Log at controller
|
|
@@ -64,8 +68,29 @@ end
|
|
|
64
68
|
LogToolbox::LogSimple.log_info('system was here') # => {"event_at":"2019-05-21 17:41:59 -0300","level":"INFO","service_name":"logging","version":"1.0.1","message":"system was here"}
|
|
65
69
|
```
|
|
66
70
|
|
|
67
|
-
Also you can log with same methods log_info, log_warn, log_error and log_critical
|
|
71
|
+
Also you can log with same methods log_debug, log_info, log_warn, log_error and log_critical
|
|
72
|
+
|
|
73
|
+
### Log routes
|
|
74
|
+
|
|
75
|
+
## Add routes config to manage your log level
|
|
76
|
+
|
|
77
|
+
At your 'routes.rb' add log routes
|
|
78
|
+
|
|
79
|
+
```ruby
|
|
80
|
+
Rails.application.routes.draw do
|
|
81
|
+
log_routes
|
|
82
|
+
end
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
You can change your application log doing a POST at /log/change_level
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"level": "FATAL"
|
|
90
|
+
}
|
|
91
|
+
```
|
|
68
92
|
|
|
93
|
+
You can test your application log doing a GET at /log/test
|
|
69
94
|
|
|
70
95
|
## Development
|
|
71
96
|
|
data/bitbucket-pipelines.yml
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
image: ruby:2.
|
|
1
|
+
image: ruby:2.6.3
|
|
2
2
|
|
|
3
3
|
pipelines:
|
|
4
4
|
default:
|
|
5
5
|
- step:
|
|
6
6
|
script:
|
|
7
7
|
- git archive --remote=git@bitbucket.org:guideinvestimentos/rails_defaults.git HEAD .rubocop.yml | tar -x
|
|
8
|
+
- gem update bundler
|
|
8
9
|
- bundle install
|
|
9
10
|
- gem install rubocop
|
|
10
|
-
- rspec -fdoc
|
|
11
|
+
- bundle exec rspec -fdoc
|
|
11
12
|
- rubocop .
|
|
12
13
|
|
|
13
14
|
branches:
|
|
14
15
|
master:
|
|
15
16
|
- step:
|
|
16
17
|
script:
|
|
18
|
+
- mkdir -p ~/.gem
|
|
17
19
|
- gem build log_toolbox.gemspec
|
|
18
20
|
- curl -u $RUBYGEMS_USERNAME:$RUBYGEMS_PASSWORD https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
|
|
19
21
|
- chmod 0600 ~/.gem/credentials
|
data/config/routes.rb
ADDED
data/lib/log_toolbox.rb
CHANGED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'log_toolbox/log_payload'
|
|
4
|
+
require 'action_controller'
|
|
5
|
+
|
|
6
|
+
module LogToolbox
|
|
7
|
+
class LogController < ActionController::Base
|
|
8
|
+
include LogToolbox::LogPayload
|
|
9
|
+
|
|
10
|
+
def change_level
|
|
11
|
+
log_info("Log level was changed to #{level_param}")
|
|
12
|
+
Rails.logger.level = Logger.const_get(level_param.upcase)
|
|
13
|
+
|
|
14
|
+
render json: {
|
|
15
|
+
message: "Your application log level was changed to #{rails_logger}",
|
|
16
|
+
log_options: options,
|
|
17
|
+
log_levels: levels
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test
|
|
22
|
+
log_debug('Log level DEBUG')
|
|
23
|
+
log_info('Log level INFO')
|
|
24
|
+
log_warn('Log level WARN')
|
|
25
|
+
log_error('Log level ERR')
|
|
26
|
+
log_critical('Log level CRIT')
|
|
27
|
+
|
|
28
|
+
render json: {
|
|
29
|
+
message: "Your application log level is #{rails_logger}",
|
|
30
|
+
log_options: options,
|
|
31
|
+
log_levels: levels
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def options
|
|
38
|
+
%w[DEBUG INFO WARN ERROR FATAL]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def levels
|
|
42
|
+
{ DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, FATAL: 4 }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def rails_logger
|
|
46
|
+
Rails.logger.level
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def level_param
|
|
50
|
+
params.require(:level)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -7,7 +7,7 @@ module LogToolbox
|
|
|
7
7
|
'fatal',
|
|
8
8
|
additional.merge(
|
|
9
9
|
message: error.try(:message),
|
|
10
|
-
|
|
10
|
+
backtrace: error.try(:backtrace),
|
|
11
11
|
status: 500
|
|
12
12
|
)
|
|
13
13
|
)
|
|
@@ -25,13 +25,17 @@ module LogToolbox
|
|
|
25
25
|
log_pattern('info', additional.merge(message: message))
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
def log_debug(message, additional = {})
|
|
29
|
+
log_pattern('debug', additional.merge(message: message))
|
|
30
|
+
end
|
|
31
|
+
|
|
28
32
|
private
|
|
29
33
|
|
|
30
|
-
# rubocop:disable Metrics/
|
|
34
|
+
# rubocop:disable Metrics/MethodLength
|
|
31
35
|
def default_log(level)
|
|
32
36
|
level = 'CRITICAL' if level == 'FATAL'
|
|
33
37
|
{
|
|
34
|
-
|
|
38
|
+
activityID: request.headers['activityID'],
|
|
35
39
|
event_at: I18n.l(Time.now, format: :timestamp),
|
|
36
40
|
level: level,
|
|
37
41
|
service_name: LogUtil.system_service_name,
|
|
@@ -41,7 +45,7 @@ module LogToolbox
|
|
|
41
45
|
username: request.headers['Authorization']
|
|
42
46
|
}
|
|
43
47
|
end
|
|
44
|
-
# rubocop:enable Metrics/
|
|
48
|
+
# rubocop:enable Metrics/MethodLength
|
|
45
49
|
|
|
46
50
|
def log_pattern(level, log_hash)
|
|
47
51
|
log = default_log(level.upcase).merge(log_hash)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'active_support'
|
|
4
|
+
require 'log_toolbox/log_helper'
|
|
4
5
|
|
|
5
6
|
module LogToolbox
|
|
6
7
|
module LogPayload
|
|
@@ -10,8 +11,8 @@ module LogToolbox
|
|
|
10
11
|
# rubocop:disable Metrics/AbcSize
|
|
11
12
|
def append_info_to_payload(payload)
|
|
12
13
|
super
|
|
13
|
-
payload[:
|
|
14
|
-
payload[:event_at] = I18n.l(Time.
|
|
14
|
+
payload[:activityID] = request.headers['activityID']
|
|
15
|
+
payload[:event_at] = I18n.l(Time.current, format: :timestamp)
|
|
15
16
|
payload[:service_name] = LogUtil.system_service_name
|
|
16
17
|
payload[:version] = LogUtil.system_version
|
|
17
18
|
payload[:origin_ipv4] = request.env['REMOTE_ADDR']
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActionDispatch
|
|
4
|
+
module Routing
|
|
5
|
+
class Mapper
|
|
6
|
+
def log_routes
|
|
7
|
+
match 'log/change_level(/:checks)(.:format)', to:
|
|
8
|
+
'log_toolbox/log#change_level', via: :post
|
|
9
|
+
|
|
10
|
+
match 'log/test(/:checks)(.:format)', to:
|
|
11
|
+
'log_toolbox/log#test', via: :get
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -15,11 +15,15 @@ module LogToolbox
|
|
|
15
15
|
log_pattern('info', additional.merge(message: message))
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def log_debug(message, additional = {})
|
|
19
|
+
log_pattern('debug', additional.merge(message: message))
|
|
20
|
+
end
|
|
21
|
+
|
|
18
22
|
private
|
|
19
23
|
|
|
20
24
|
def log_pattern(level, log_hash)
|
|
21
25
|
log = default_log(level.upcase).merge(log_hash)
|
|
22
|
-
|
|
26
|
+
Rails.logger.send(level, normalize_hash(log))
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def default_log(level)
|
|
@@ -27,7 +31,7 @@ module LogToolbox
|
|
|
27
31
|
event_at: I18n.l(Time.now, format: :timestamp),
|
|
28
32
|
level: level,
|
|
29
33
|
service_name: LogUtil.system_service_name,
|
|
30
|
-
version: LogUtil.system_version
|
|
34
|
+
version: LogUtil.system_version
|
|
31
35
|
}
|
|
32
36
|
end
|
|
33
37
|
|
|
@@ -1,30 +1,71 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'lograge'
|
|
4
|
+
require 'logstash-logger'
|
|
5
|
+
|
|
3
6
|
module LogToolbox
|
|
4
7
|
class LogrageConfig
|
|
5
|
-
|
|
8
|
+
attr_accessor :config
|
|
9
|
+
|
|
10
|
+
LOGSTASH_URL = ENV['LOGSTASH_URL']
|
|
11
|
+
LOGSTASH_PORT = ENV['LOGSTASH_PORT']
|
|
12
|
+
LOGSTASH_PROTOCOL = ENV.fetch('LOGSTASH_PROTOCOL', 'udp')
|
|
13
|
+
|
|
6
14
|
def self.configure
|
|
7
15
|
Rails.application.configure do
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
id: event.payload[:id],
|
|
15
|
-
event_at: event.payload[:event_at],
|
|
16
|
-
level: 'INFO',
|
|
17
|
-
service_name: event.payload[:service_name],
|
|
18
|
-
version: event.payload[:version],
|
|
19
|
-
origin_ipv4: event.payload[:origin_ipv4],
|
|
20
|
-
destination_ipv4: event.payload[:destination_ipv4],
|
|
21
|
-
username: event.payload[:username],
|
|
22
|
-
exception_stack: event.payload[:exception_stack],
|
|
23
|
-
response: event.payload[:response]
|
|
24
|
-
}
|
|
16
|
+
log_config = LogToolbox::LogrageConfig.new(config)
|
|
17
|
+
log_config.configure_log_format
|
|
18
|
+
if ENV['RAILS_ENV'] == 'development'
|
|
19
|
+
log_config.configure_log_output_stdout
|
|
20
|
+
else
|
|
21
|
+
log_config.configure_log_output_logstash
|
|
25
22
|
end
|
|
26
23
|
end
|
|
27
|
-
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def initialize(config)
|
|
27
|
+
@config = config
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def configure_log_output_logstash
|
|
31
|
+
config.logger = LogStashLogger.new(type: LOGSTASH_PROTOCOL,
|
|
32
|
+
host: LOGSTASH_URL,
|
|
33
|
+
port: LOGSTASH_PORT)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def configure_log_output_stdout
|
|
37
|
+
return unless ENV['RAILS_LOG_TO_STDOUT'].present?
|
|
38
|
+
|
|
39
|
+
logger = ActiveSupport::Logger.new($stdout)
|
|
40
|
+
logger.formatter = config.log_formatter
|
|
41
|
+
config.logger = ActiveSupport::TaggedLogging.new(logger)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
45
|
+
def configure_log_format
|
|
46
|
+
config.lograge.enabled = true
|
|
47
|
+
config.lograge.base_controller_class = 'ActionController::API'
|
|
48
|
+
config.lograge.formatter = Lograge::Formatters::Json.new
|
|
49
|
+
|
|
50
|
+
config.lograge.custom_options = lambda do |event|
|
|
51
|
+
{
|
|
52
|
+
event_at: event.payload[:event_at],
|
|
53
|
+
parameters: event.payload[:params].to_json,
|
|
54
|
+
level: 'INFO',
|
|
55
|
+
service_name: event.payload[:service_name],
|
|
56
|
+
version: event.payload[:version],
|
|
57
|
+
origin_ipv4: event.payload[:origin_ipv4],
|
|
58
|
+
destination_ipv4: event.payload[:destination_ipv4],
|
|
59
|
+
username: wso2_user_name(event.payload[:headers][:HTTP_USER_IDENTIFIER])
|
|
60
|
+
}
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
# rubocop:enable Metrics/AbcSize,Metrics/MethodLength
|
|
64
|
+
|
|
65
|
+
def wso2_user_name(http_user_identifier)
|
|
66
|
+
return nil unless http_user_identifier.is_a? String
|
|
67
|
+
|
|
68
|
+
http_user_identifier ? JSON.parse(Base64.decode64(http_user_identifier))['user_name'] : nil
|
|
28
69
|
end
|
|
29
70
|
end
|
|
30
71
|
end
|
data/lib/log_toolbox/version.rb
CHANGED
data/log_toolbox.gemspec
CHANGED
|
@@ -4,33 +4,38 @@ lib = File.expand_path('lib', __dir__)
|
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require 'log_toolbox/version'
|
|
6
6
|
|
|
7
|
+
# rubocop:disable Metrics/BlockLength
|
|
7
8
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name
|
|
9
|
-
spec.version
|
|
10
|
-
spec.authors
|
|
11
|
-
spec.email
|
|
9
|
+
spec.name = 'log_toolbox'
|
|
10
|
+
spec.version = LogToolbox::VERSION
|
|
11
|
+
spec.authors = ['Caio Almeida']
|
|
12
|
+
spec.email = ['cbalmeida@guide.com.br']
|
|
12
13
|
|
|
13
|
-
spec.
|
|
14
|
-
spec.
|
|
15
|
-
spec.
|
|
14
|
+
spec.required_ruby_version = '>= 2.4.0'
|
|
15
|
+
spec.summary = 'Guide default gem for ruby application logging'
|
|
16
|
+
spec.homepage = 'http://bitbucket.org/guideinvestimentos/log_toolbox'
|
|
17
|
+
spec.license = 'Guide'
|
|
16
18
|
|
|
17
|
-
spec.files
|
|
19
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
18
20
|
`git ls-files -z`.split("\x0").reject do |f|
|
|
19
21
|
f.match(%r{^(test|spec|features)/})
|
|
20
22
|
end
|
|
21
23
|
end
|
|
22
24
|
spec.require_paths = ['lib']
|
|
23
25
|
|
|
24
|
-
spec.add_dependency 'actionpack', '>= 4.0.0'
|
|
25
|
-
spec.add_dependency 'activesupport', '>= 4.0.0'
|
|
26
26
|
spec.add_dependency 'lograge', '>= 0.11.1'
|
|
27
27
|
spec.add_dependency 'logstash-event', '>= 1.2.02'
|
|
28
|
+
spec.add_dependency 'logstash-logger', '>= 0.26.1'
|
|
29
|
+
spec.add_dependency 'rails', ['>= 4.0']
|
|
30
|
+
spec.add_dependency 'rspec', '>= 3.0.0'
|
|
31
|
+
spec.add_dependency 'rspec-rails'
|
|
28
32
|
|
|
29
|
-
spec.add_development_dependency 'bundler'
|
|
33
|
+
spec.add_development_dependency 'bundler'
|
|
30
34
|
spec.add_development_dependency 'pry'
|
|
31
35
|
spec.add_development_dependency 'pry-byebug'
|
|
32
|
-
spec.add_development_dependency 'rake'
|
|
33
|
-
spec.add_development_dependency 'rspec'
|
|
36
|
+
spec.add_development_dependency 'rake'
|
|
37
|
+
spec.add_development_dependency 'rspec-rails'
|
|
34
38
|
spec.add_development_dependency 'rubocop'
|
|
35
39
|
spec.add_development_dependency 'shoulda-matchers', '~> 3.1'
|
|
36
40
|
end
|
|
41
|
+
# rubocop:enable Metrics/BlockLength
|
metadata
CHANGED
|
@@ -1,85 +1,113 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: log_toolbox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Caio Almeida
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-11-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: lograge
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 0.11.1
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: 0.11.1
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: logstash-event
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 1.2.02
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
40
|
+
version: 1.2.02
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: logstash-logger
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.
|
|
47
|
+
version: 0.26.1
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.
|
|
54
|
+
version: 0.26.1
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: rails
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
61
|
+
version: '4.0'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
68
|
+
version: '4.0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rspec
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 3.0.0
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 3.0.0
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec-rails
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
69
97
|
- !ruby/object:Gem::Dependency
|
|
70
98
|
name: bundler
|
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
|
72
100
|
requirements:
|
|
73
|
-
- - "
|
|
101
|
+
- - ">="
|
|
74
102
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
103
|
+
version: '0'
|
|
76
104
|
type: :development
|
|
77
105
|
prerelease: false
|
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
107
|
requirements:
|
|
80
|
-
- - "
|
|
108
|
+
- - ">="
|
|
81
109
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
110
|
+
version: '0'
|
|
83
111
|
- !ruby/object:Gem::Dependency
|
|
84
112
|
name: pry
|
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -112,30 +140,30 @@ dependencies:
|
|
|
112
140
|
name: rake
|
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
|
114
142
|
requirements:
|
|
115
|
-
- - "
|
|
143
|
+
- - ">="
|
|
116
144
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
145
|
+
version: '0'
|
|
118
146
|
type: :development
|
|
119
147
|
prerelease: false
|
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
149
|
requirements:
|
|
122
|
-
- - "
|
|
150
|
+
- - ">="
|
|
123
151
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
152
|
+
version: '0'
|
|
125
153
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rspec
|
|
154
|
+
name: rspec-rails
|
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
|
128
156
|
requirements:
|
|
129
|
-
- - "
|
|
157
|
+
- - ">="
|
|
130
158
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '
|
|
159
|
+
version: '0'
|
|
132
160
|
type: :development
|
|
133
161
|
prerelease: false
|
|
134
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
163
|
requirements:
|
|
136
|
-
- - "
|
|
164
|
+
- - ">="
|
|
137
165
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '
|
|
166
|
+
version: '0'
|
|
139
167
|
- !ruby/object:Gem::Dependency
|
|
140
168
|
name: rubocop
|
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -183,9 +211,12 @@ files:
|
|
|
183
211
|
- bin/console
|
|
184
212
|
- bin/setup
|
|
185
213
|
- bitbucket-pipelines.yml
|
|
214
|
+
- config/routes.rb
|
|
186
215
|
- lib/log_toolbox.rb
|
|
216
|
+
- lib/log_toolbox/log_controller.rb
|
|
187
217
|
- lib/log_toolbox/log_helper.rb
|
|
188
218
|
- lib/log_toolbox/log_payload.rb
|
|
219
|
+
- lib/log_toolbox/log_routes.rb
|
|
189
220
|
- lib/log_toolbox/log_simple.rb
|
|
190
221
|
- lib/log_toolbox/log_util.rb
|
|
191
222
|
- lib/log_toolbox/lograge_config.rb
|
|
@@ -203,15 +234,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
203
234
|
requirements:
|
|
204
235
|
- - ">="
|
|
205
236
|
- !ruby/object:Gem::Version
|
|
206
|
-
version:
|
|
237
|
+
version: 2.4.0
|
|
207
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
239
|
requirements:
|
|
209
240
|
- - ">="
|
|
210
241
|
- !ruby/object:Gem::Version
|
|
211
242
|
version: '0'
|
|
212
243
|
requirements: []
|
|
213
|
-
|
|
214
|
-
rubygems_version: 2.6.13
|
|
244
|
+
rubygems_version: 3.0.3
|
|
215
245
|
signing_key:
|
|
216
246
|
specification_version: 4
|
|
217
247
|
summary: Guide default gem for ruby application logging
|