betterlog 0.3.0 → 0.4.0
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 +4 -4
- data/README.md +46 -5
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/betterlog.gemspec +6 -3
- data/bin/betterlog_pusher +21 -12
- data/config/log.yml +20 -2
- data/lib/betterlog/log.rb +1 -1
- data/lib/betterlog/version.rb +1 -1
- data/spec/betterlog/log_spec.rb +7 -6
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4765c4c4583c00e53272425f3eba50890c1c1c9534bbcf0b9653befe1f5d59d0
|
4
|
+
data.tar.gz: 78523987e0a140b50aaee1e6d663b4c3821d5fab4e2dc750c17f5d3b5ca5b7d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cfd4bad70799e9e750439231bcc638e652f91e239f287688cab3895c0a6f72d143b48bb26297867860f1146c8837d1bdca595bd1a18bf601e24f467b869ddda
|
7
|
+
data.tar.gz: 76d29b2dd078b6ff14304851d2e62283434217d43667e62bad1b0f507ca729575b8927bdbd0d4e0264af377decf095377563fe6edd6660c287e1c4206a135405
|
data/README.md
CHANGED
@@ -2,17 +2,58 @@
|
|
2
2
|
|
3
3
|
## Description
|
4
4
|
|
5
|
-
Logging tools for betterplace structured logging
|
5
|
+
Logging tools for betterplace structured logging in rails applications.
|
6
|
+
|
7
|
+
## Configuration
|
8
|
+
|
9
|
+
Copy the example configuration in config/log.yml into your application to get
|
10
|
+
you started. Then add this line to your Gemfile:
|
11
|
+
|
12
|
+
```
|
13
|
+
gem 'betterlog'
|
14
|
+
```
|
6
15
|
|
7
16
|
## Usage
|
8
17
|
|
9
18
|
### `betterlog`
|
10
19
|
|
11
|
-
|
20
|
+
Use it to tail local logfiles:
|
21
|
+
|
22
|
+
```
|
23
|
+
$ betterlog -f
|
24
|
+
```
|
25
|
+
|
26
|
+
or filter from stdin with
|
27
|
+
|
28
|
+
```
|
29
|
+
$ cat log/development.log | betterlog
|
30
|
+
```
|
31
|
+
|
32
|
+
Search for GET in the last 1000 rails log lines:
|
33
|
+
|
34
|
+
```
|
35
|
+
$ betterlog -F rails -n 1000 -s GET
|
36
|
+
```
|
37
|
+
|
38
|
+
Display the help for more options with `betterlog -h`.
|
12
39
|
|
13
40
|
### `betterlog_pusher`
|
14
41
|
|
15
|
-
|
42
|
+
- `BETTERLOG_SERVER_URL` is the URL log information is ultimately posted to
|
43
|
+
in the form of `https://user:password@appname-prd-log.betterops.de/log`.
|
44
|
+
|
45
|
+
- `BETTERLOG_LINES`, e. g. 1000, is the number of lines which are posted per
|
46
|
+
every request to the above URL.
|
47
|
+
|
48
|
+
- `REDIS_URL` the redis server URL for the server where Log information is
|
49
|
+
stored before posted to the betterlog server.
|
50
|
+
|
51
|
+
The rails application should be configured like this to store log information
|
52
|
+
on this redis server:
|
53
|
+
|
54
|
+
```
|
55
|
+
config.logger = Betterlog::Logger.new(Redis.new(url: ENV.fetch('REDIS_URL')))
|
56
|
+
```
|
16
57
|
|
17
58
|
### `betterlog_sink`
|
18
59
|
|
@@ -23,12 +64,12 @@ To tail a log and prettify the output just call and pipe to the `betterlog`
|
|
23
64
|
executable:
|
24
65
|
|
25
66
|
```
|
26
|
-
|
67
|
+
$ betterlog_sink --since=1m -f | betterlog
|
27
68
|
```
|
28
69
|
|
29
70
|
The sink always defaults to the production logfile, to switch the context to
|
30
71
|
staging, prepend the command with the `LOG_ENV` env variable like so:
|
31
72
|
|
32
73
|
```
|
33
|
-
|
74
|
+
$ LOG_ENV=staging betterlog_sink -f | betterlog
|
34
75
|
```
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/betterlog.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: betterlog 0.
|
2
|
+
# stub: betterlog 0.4.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "betterlog".freeze
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.4.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["betterplace Developers".freeze]
|
11
|
-
s.date = "2019-07-
|
11
|
+
s.date = "2019-07-17"
|
12
12
|
s.description = "This library provides structure json logging for our rails projects".freeze
|
13
13
|
s.email = "developers@betterplace.org".freeze
|
14
14
|
s.executables = ["betterlog".freeze, "betterlog_pusher".freeze, "betterlog_sink".freeze]
|
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
s.add_runtime_dependency(%q<json>.freeze, ["~> 2.0"])
|
35
35
|
s.add_runtime_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
|
36
36
|
s.add_runtime_dependency(%q<redis>.freeze, [">= 2.4"])
|
37
|
+
s.add_runtime_dependency(%q<redlock>.freeze, [">= 0"])
|
37
38
|
s.add_runtime_dependency(%q<excon>.freeze, [">= 0"])
|
38
39
|
else
|
39
40
|
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.10.0"])
|
@@ -46,6 +47,7 @@ Gem::Specification.new do |s|
|
|
46
47
|
s.add_dependency(%q<json>.freeze, ["~> 2.0"])
|
47
48
|
s.add_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
|
48
49
|
s.add_dependency(%q<redis>.freeze, [">= 2.4"])
|
50
|
+
s.add_dependency(%q<redlock>.freeze, [">= 0"])
|
49
51
|
s.add_dependency(%q<excon>.freeze, [">= 0"])
|
50
52
|
end
|
51
53
|
else
|
@@ -59,6 +61,7 @@ Gem::Specification.new do |s|
|
|
59
61
|
s.add_dependency(%q<json>.freeze, ["~> 2.0"])
|
60
62
|
s.add_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
|
61
63
|
s.add_dependency(%q<redis>.freeze, [">= 2.4"])
|
64
|
+
s.add_dependency(%q<redlock>.freeze, [">= 0"])
|
62
65
|
s.add_dependency(%q<excon>.freeze, [">= 0"])
|
63
66
|
end
|
64
67
|
end
|
data/bin/betterlog_pusher
CHANGED
@@ -3,26 +3,32 @@
|
|
3
3
|
|
4
4
|
require 'betterlog'
|
5
5
|
require 'excon'
|
6
|
+
require 'redlock'
|
6
7
|
|
7
|
-
lines
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
lines = Integer(ENV.fetch('BETTERLOG_LINES', 1_000))
|
9
|
+
lock_time = Integer(ENV.fetch('BETTERLOG_LOCK_TIME', 60_000))
|
10
|
+
url = ENV.fetch('BETTERLOG_SERVER_URL')
|
11
|
+
name = ENV['BETTERLOG_NAME']
|
12
|
+
redis_url = ENV.fetch('REDIS_URL')
|
13
|
+
redis = Redis.new(url: redis_url)
|
14
|
+
lm = Redlock::Client.new([ redis_url ])
|
15
|
+
logger = Betterlog::Logger.new(redis, name: name)
|
12
16
|
|
13
17
|
quit = false
|
14
|
-
|
15
18
|
[ :TERM, :INT, :QUIT ].each { |s| trap(s) { quit = true } }
|
16
19
|
|
17
20
|
STDOUT.sync = true
|
18
21
|
loop do
|
19
22
|
count = 0
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
lm.lock!(File.basename($0), lock_time) do
|
24
|
+
print ?…
|
25
|
+
logger.each_slice(lines).with_index do |batch, i|
|
26
|
+
count.zero? and print ?(
|
27
|
+
count += batch.sum(&:size)
|
28
|
+
attempt(attempts: 10, sleep: -60, reraise: true) do
|
29
|
+
print ?┄
|
30
|
+
Excon.post(url, body: batch.join)
|
31
|
+
end
|
26
32
|
end
|
27
33
|
end
|
28
34
|
quit and exit
|
@@ -31,4 +37,7 @@ loop do
|
|
31
37
|
else
|
32
38
|
print "→%s)" % Tins::Unit.format(count, format: '%.2f %U', prefix: 1024, unit: ?b)
|
33
39
|
end
|
40
|
+
rescue Redlock::LockError => e
|
41
|
+
STDERR.puts "Caught #{e.class}: #{e} => Retrying!"
|
42
|
+
exit
|
34
43
|
end
|
data/config/log.yml
CHANGED
@@ -13,6 +13,7 @@ development: &development
|
|
13
13
|
default: &default_format >
|
14
14
|
{%lt%timestamp} {%5s%severity}
|
15
15
|
"{%0.<%= ENV.fetch('COLUMNS', 80).to_i / 2 %>%message}"
|
16
|
+
{host}
|
16
17
|
{location}
|
17
18
|
{file}{-%O%backtrace}{-%O%meta}
|
18
19
|
d: *default_format
|
@@ -23,6 +24,7 @@ development: &development
|
|
23
24
|
metric: {metric} {value} {type}
|
24
25
|
error_class: {error_class}
|
25
26
|
backtrace: {%O%backtrace}
|
27
|
+
host: {host}
|
26
28
|
location: {location}
|
27
29
|
file: {file}
|
28
30
|
meta: {%O%meta}\n
|
@@ -43,5 +45,21 @@ development: &development
|
|
43
45
|
- /usr/local/var/log/elasticsearch.log
|
44
46
|
legacy_supported: yes
|
45
47
|
test: *development
|
46
|
-
staging:
|
47
|
-
|
48
|
+
staging:
|
49
|
+
<<: *development
|
50
|
+
sink:
|
51
|
+
namespace: betterlog
|
52
|
+
source: betterlog-app
|
53
|
+
cluster:
|
54
|
+
name: betterlog
|
55
|
+
zone: europe-west1-b
|
56
|
+
project: project-42
|
57
|
+
production:
|
58
|
+
<<: *development
|
59
|
+
sink:
|
60
|
+
namespace: betterlog
|
61
|
+
source: betterlog-app
|
62
|
+
cluster:
|
63
|
+
name: betterlog
|
64
|
+
zone: europe-west1-b
|
65
|
+
project: project-666
|
data/lib/betterlog/log.rb
CHANGED
@@ -113,7 +113,7 @@ module Betterlog
|
|
113
113
|
rescue => error
|
114
114
|
e = Log::Event.ify(error)
|
115
115
|
rest |= e.as_hash.subhash(:error_class, :backtrace, :message)
|
116
|
-
rest[:message] = "#{rest[:message]} while measuring metric #{metric}"
|
116
|
+
rest[:message] = "#{rest[:message].inspect} while measuring metric #{metric}"
|
117
117
|
raise error
|
118
118
|
ensure
|
119
119
|
protect do
|
data/lib/betterlog/version.rb
CHANGED
data/spec/betterlog/log_spec.rb
CHANGED
@@ -154,7 +154,7 @@ describe Betterlog::Log do
|
|
154
154
|
|
155
155
|
class MyEx < StandardError
|
156
156
|
def backtrace
|
157
|
-
[]
|
157
|
+
%w[ backtrace ]
|
158
158
|
end
|
159
159
|
end
|
160
160
|
|
@@ -162,18 +162,19 @@ describe Betterlog::Log do
|
|
162
162
|
expected_event = Log::Event.new(
|
163
163
|
metric: 'foo',
|
164
164
|
type: 'seconds',
|
165
|
-
value:
|
166
|
-
timestamp: "2011-11-11T10:11:
|
167
|
-
message: 'MyEx: we were fucked while measuring metric foo',
|
165
|
+
value: 3.0,
|
166
|
+
timestamp: "2011-11-11T10:11:14.000Z",
|
167
|
+
message: '"MyEx: we were fucked" while measuring metric foo',
|
168
168
|
error_class: 'MyEx',
|
169
|
-
backtrace: []
|
169
|
+
backtrace: %w[ backtrace ]
|
170
170
|
)
|
171
171
|
expect(instance).to receive(:emit).with(expected_event)
|
172
172
|
raised = false
|
173
173
|
begin
|
174
174
|
Log.measure(metric: 'foo') do
|
175
|
-
Time.dummy = Time.now +
|
175
|
+
Time.dummy = Time.now + 3
|
176
176
|
raise MyEx, "we were fucked"
|
177
|
+
Time.dummy = Time.now + 7
|
177
178
|
end
|
178
179
|
rescue MyEx
|
179
180
|
raised = true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: betterlog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- betterplace Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -156,6 +156,20 @@ dependencies:
|
|
156
156
|
- - ">="
|
157
157
|
- !ruby/object:Gem::Version
|
158
158
|
version: '2.4'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: redlock
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
159
173
|
- !ruby/object:Gem::Dependency
|
160
174
|
name: excon
|
161
175
|
requirement: !ruby/object:Gem::Requirement
|