betterlog 0.13.1 → 0.15.2
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/.semaphore/semaphore.yml +63 -0
- data/Dockerfile +3 -3
- data/Makefile +1 -1
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/betterlog.gemspec +7 -5
- data/bin/betterlog +4 -4
- data/lib/betterlog.rb +1 -4
- data/lib/betterlog/log.rb +6 -2
- data/lib/betterlog/log/event.rb +9 -1
- data/lib/betterlog/log/event_formatter.rb +5 -1
- data/lib/betterlog/log/severity.rb +2 -0
- data/lib/betterlog/log_event_formatter.rb +2 -1
- data/lib/betterlog/logger.rb +16 -3
- data/lib/betterlog/railtie.rb +1 -0
- data/lib/betterlog/version.rb +1 -1
- data/spec/betterlog/log_spec.rb +11 -0
- data/spec/spec_helper.rb +6 -0
- metadata +18 -4
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27e6af480e7ec65272867c76176a644ce2c925e853aff060074840f17ad5d714
|
4
|
+
data.tar.gz: 0531306c3a7b421691b67e78be5d7e960c91cb421e4e2db22657cdbe2cc248e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '096483149f340b0cb1f8fc5253ad033e7ce7a4dc4abdd2c07c78beb464a8cd95538b956c4f82b45133d2287cfb767c754fdd1fd8079de780534ed9def9532267'
|
7
|
+
data.tar.gz: 610301cb7fc4b028816d78f5ce5f8330b5c04e291ff5099035af49ab3de85def2048455276767b0253f60bebc9d7dd1eb9fb3c3902414ae60e79bf4057ac054b
|
@@ -0,0 +1,63 @@
|
|
1
|
+
version: v1.0
|
2
|
+
name: Betterlog pipeline
|
3
|
+
agent:
|
4
|
+
machine:
|
5
|
+
type: e1-standard-2
|
6
|
+
os_image: ubuntu1804
|
7
|
+
|
8
|
+
blocks:
|
9
|
+
- name: Caching
|
10
|
+
task:
|
11
|
+
prologue:
|
12
|
+
commands:
|
13
|
+
- checkout
|
14
|
+
jobs:
|
15
|
+
- name: cache bundle
|
16
|
+
commands:
|
17
|
+
- sem-version ruby 2.7.2
|
18
|
+
- cache restore gems-$SEMAPHORE_GIT_BRANCH,gems-master
|
19
|
+
- bundle config set path 'vendor/bundle'
|
20
|
+
- bundle config jobs $(getconf _NPROCESSORS_ONLN)
|
21
|
+
- bundle install
|
22
|
+
- cache store gems-$SEMAPHORE_GIT_BRANCH vendor/bundle
|
23
|
+
|
24
|
+
- name: "Unit tests"
|
25
|
+
task:
|
26
|
+
env_vars:
|
27
|
+
- name: RAILS_ENV
|
28
|
+
value: test
|
29
|
+
prologue:
|
30
|
+
commands:
|
31
|
+
- checkout
|
32
|
+
|
33
|
+
# Setup ruby
|
34
|
+
- sem-version ruby 2.7.2
|
35
|
+
|
36
|
+
# Setup gems
|
37
|
+
- cache restore gems-$SEMAPHORE_GIT_BRANCH,gems-master
|
38
|
+
- bundle config set path 'vendor/bundle'
|
39
|
+
- bundle config jobs $(getconf _NPROCESSORS_ONLN)
|
40
|
+
- bundle install
|
41
|
+
|
42
|
+
jobs:
|
43
|
+
- name: RSpec Unit Tests
|
44
|
+
commands:
|
45
|
+
- bundle exec rake
|
46
|
+
|
47
|
+
- name: Building Docker Image
|
48
|
+
task:
|
49
|
+
|
50
|
+
secrets:
|
51
|
+
- name: GCP
|
52
|
+
|
53
|
+
prologue:
|
54
|
+
commands:
|
55
|
+
- gcloud auth activate-service-account --key-file=.secrets/gcp.json
|
56
|
+
- gcloud auth configure-docker -q eu.gcr.io
|
57
|
+
- checkout
|
58
|
+
|
59
|
+
jobs:
|
60
|
+
- name: Building and pushing
|
61
|
+
commands:
|
62
|
+
- make build
|
63
|
+
- test "$SEMAPHORE_GIT_BRANCH" = "master" && make push-latest
|
data/Dockerfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
FROM alpine:3.12.
|
1
|
+
FROM alpine:3.12.3 AS builder
|
2
2
|
|
3
3
|
# Update/Upgrade/Add packages for building
|
4
4
|
|
@@ -16,9 +16,9 @@ RUN make clobber
|
|
16
16
|
|
17
17
|
RUN go get -u github.com/betterplace/go-init
|
18
18
|
|
19
|
-
RUN make
|
19
|
+
RUN make setup all
|
20
20
|
|
21
|
-
FROM alpine:3.12.
|
21
|
+
FROM alpine:3.12.3 AS runner
|
22
22
|
|
23
23
|
# Update/Upgrade/Add packages
|
24
24
|
|
data/Makefile
CHANGED
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.15.2
|
data/betterlog.gemspec
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: betterlog 0.
|
2
|
+
# stub: betterlog 0.15.2 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.15.2"
|
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 = "
|
11
|
+
s.date = "2021-02-03"
|
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]
|
15
15
|
s.extra_rdoc_files = ["README.md".freeze, "lib/betterlog.rb".freeze, "lib/betterlog/global_metadata.rb".freeze, "lib/betterlog/log.rb".freeze, "lib/betterlog/log/event.rb".freeze, "lib/betterlog/log/event_formatter.rb".freeze, "lib/betterlog/log/severity.rb".freeze, "lib/betterlog/log_event_formatter.rb".freeze, "lib/betterlog/logger.rb".freeze, "lib/betterlog/notifiers.rb".freeze, "lib/betterlog/railtie.rb".freeze, "lib/betterlog/version.rb".freeze]
|
16
|
-
s.files = [".gitignore".freeze, ".
|
16
|
+
s.files = [".gitignore".freeze, ".semaphore/semaphore.yml".freeze, "Dockerfile".freeze, "Gemfile".freeze, "LICENSE".freeze, "Makefile".freeze, "README.md".freeze, "Rakefile".freeze, "TODO.md".freeze, "VERSION".freeze, "betterlog.gemspec".freeze, "betterlog/config.go".freeze, "betterlog/healthz.go".freeze, "betterlog/redis_cert_cache.go".freeze, "bin/betterlog".freeze, "bin/betterlog_pusher".freeze, "bin/betterlog_sink".freeze, "cloudbuild.yaml".freeze, "cmd/betterlog-server/LICENSE".freeze, "cmd/betterlog-server/main.go".freeze, "config/log.yml".freeze, "go.mod".freeze, "go.sum".freeze, "lib/betterlog.rb".freeze, "lib/betterlog/global_metadata.rb".freeze, "lib/betterlog/log.rb".freeze, "lib/betterlog/log/event.rb".freeze, "lib/betterlog/log/event_formatter.rb".freeze, "lib/betterlog/log/severity.rb".freeze, "lib/betterlog/log_event_formatter.rb".freeze, "lib/betterlog/logger.rb".freeze, "lib/betterlog/notifiers.rb".freeze, "lib/betterlog/railtie.rb".freeze, "lib/betterlog/version.rb".freeze, "spec/betterlog/global_metadata_spec.rb".freeze, "spec/betterlog/log/event_spec.rb".freeze, "spec/betterlog/log/severity_spec.rb".freeze, "spec/betterlog/log_spec.rb".freeze, "spec/betterlog/logger_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
17
17
|
s.homepage = "http://github.com/betterplace/betterlog".freeze
|
18
18
|
s.rdoc_options = ["--title".freeze, "Betterlog".freeze, "--main".freeze, "README.md".freeze]
|
19
|
-
s.rubygems_version = "3.
|
19
|
+
s.rubygems_version = "3.2.5".freeze
|
20
20
|
s.summary = "Structured logging support for bp".freeze
|
21
21
|
s.test_files = ["spec/betterlog/global_metadata_spec.rb".freeze, "spec/betterlog/log/event_spec.rb".freeze, "spec/betterlog/log/severity_spec.rb".freeze, "spec/betterlog/log_spec.rb".freeze, "spec/betterlog/logger_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
22
22
|
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
30
30
|
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
31
31
|
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
32
|
+
s.add_development_dependency(%q<mock_redis>.freeze, [">= 0"])
|
32
33
|
s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.3", ">= 1.22.0"])
|
33
34
|
s.add_runtime_dependency(%q<complex_config>.freeze, [">= 0"])
|
34
35
|
s.add_runtime_dependency(%q<file-tail>.freeze, ["~> 1.0"])
|
@@ -42,6 +43,7 @@ Gem::Specification.new do |s|
|
|
42
43
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
43
44
|
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
44
45
|
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
46
|
+
s.add_dependency(%q<mock_redis>.freeze, [">= 0"])
|
45
47
|
s.add_dependency(%q<tins>.freeze, ["~> 1.3", ">= 1.22.0"])
|
46
48
|
s.add_dependency(%q<complex_config>.freeze, [">= 0"])
|
47
49
|
s.add_dependency(%q<file-tail>.freeze, ["~> 1.0"])
|
data/bin/betterlog
CHANGED
@@ -96,10 +96,10 @@ module Betterlog
|
|
96
96
|
return true unless @opts[?s]
|
97
97
|
@opts[?s].all? do |param|
|
98
98
|
case param
|
99
|
-
when
|
100
|
-
event[
|
101
|
-
when
|
102
|
-
event[
|
99
|
+
when /\A([^:]+):([^=]+)=(.+)\z/
|
100
|
+
event[$1]&.[]($2.to_sym)&.include?($3)
|
101
|
+
when /\A([^=]+)=(.+)\z/
|
102
|
+
event[$1]&.include?($2)
|
103
103
|
when String
|
104
104
|
event.to_json.include?(@opts[?s])
|
105
105
|
else
|
data/lib/betterlog.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'tins/xt'
|
2
2
|
require 'json'
|
3
|
-
require '
|
4
|
-
require 'time'
|
5
|
-
require 'term/ansicolor'
|
3
|
+
require 'complex_config'
|
6
4
|
|
7
5
|
module Betterlog
|
8
6
|
end
|
@@ -13,7 +11,6 @@ require 'betterlog/global_metadata'
|
|
13
11
|
require 'betterlog/logger'
|
14
12
|
|
15
13
|
if defined? Rails
|
16
|
-
require 'betterlog/log_event_formatter'
|
17
14
|
require 'betterlog/railtie'
|
18
15
|
end
|
19
16
|
|
data/lib/betterlog/log.rb
CHANGED
@@ -7,12 +7,16 @@ require 'betterlog/log/severity'
|
|
7
7
|
module Betterlog
|
8
8
|
class Log
|
9
9
|
include Tins::SexySingleton
|
10
|
+
extend ComplexConfig::Provider::Shortcuts
|
10
11
|
|
11
12
|
class_attr_accessor :default_logger
|
12
13
|
self.default_logger = Logger.new(STDERR)
|
14
|
+
if level = cc.log?&.level?
|
15
|
+
default_logger.level = level
|
16
|
+
end
|
13
17
|
|
14
18
|
def logger
|
15
|
-
defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger :
|
19
|
+
defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger : self.class.default_logger
|
16
20
|
end
|
17
21
|
|
18
22
|
# Logs a message on severity info.
|
@@ -134,7 +138,7 @@ module Betterlog
|
|
134
138
|
end
|
135
139
|
event[:emitter] = self.class.name.downcase
|
136
140
|
notify(event)
|
137
|
-
logger.send(event.severity.to_sym, event
|
141
|
+
logger.send(event.severity.to_sym, JSON.generate(event))
|
138
142
|
self
|
139
143
|
ensure
|
140
144
|
GlobalMetadata.data.clear
|
data/lib/betterlog/log/event.rb
CHANGED
@@ -75,7 +75,15 @@ module Betterlog
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def to_json(*a)
|
78
|
-
|
78
|
+
JSON.generate(as_json)
|
79
|
+
rescue
|
80
|
+
# Sometimes rails logging messages contain invalid utf-8 characters
|
81
|
+
# generating various standard errors. Let's fallback to a barebones
|
82
|
+
# event with just a cleaned up message for these cases.
|
83
|
+
JSON.generate({
|
84
|
+
severity: @data[:severity],
|
85
|
+
message: @data.fetch(:message, '').encode('utf-8', invalid: :replace, undef: :replace, replace: ''),
|
86
|
+
})
|
79
87
|
end
|
80
88
|
|
81
89
|
def format(*args)
|
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'term/ansicolor'
|
3
|
+
|
1
4
|
module Betterlog
|
2
5
|
class Log
|
3
6
|
class EventFormatter
|
4
7
|
include Term::ANSIColor
|
8
|
+
include ComplexConfig::Provider::Shortcuts
|
5
9
|
|
6
10
|
def initialize(event)
|
7
11
|
@event = event
|
@@ -14,7 +18,7 @@ module Betterlog
|
|
14
18
|
when :format
|
15
19
|
format_pattern(format: format)
|
16
20
|
else
|
17
|
-
@event
|
21
|
+
JSON.generate(@event)
|
18
22
|
end
|
19
23
|
ensure
|
20
24
|
Term::ANSIColor.coloring = old_coloring
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Betterlog
|
2
2
|
class LogEventFormatter < ActiveSupport::Logger::Formatter
|
3
3
|
include ActiveSupport::TaggedLogging::Formatter
|
4
|
+
include ComplexConfig::Provider::Shortcuts
|
4
5
|
|
5
6
|
def emitter
|
6
7
|
'legacy'
|
@@ -35,7 +36,7 @@ module Betterlog
|
|
35
36
|
event[:location] = [ l.absolute_path, l.lineno ] * ?:
|
36
37
|
end
|
37
38
|
program and event[:program] = program
|
38
|
-
message = event
|
39
|
+
message = JSON.generate(event)
|
39
40
|
end
|
40
41
|
end
|
41
42
|
rescue => e
|
data/lib/betterlog/logger.rb
CHANGED
@@ -1,10 +1,20 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'redis' unless defined?(Redis)
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
require 'logger'
|
2
6
|
|
3
7
|
module Betterlog
|
4
8
|
class Logger < ::Logger
|
9
|
+
include ComplexConfig::Provider::Shortcuts
|
10
|
+
|
5
11
|
def initialize(redis, shift_age = 0, shift_size = 1048576, name: nil, buffer_size: nil, **opts)
|
6
12
|
@redis = redis
|
7
13
|
@fallback = ::Logger.new(STDERR)
|
14
|
+
if level = cc.log.level?
|
15
|
+
self.level = level
|
16
|
+
@fallback.level = level
|
17
|
+
end
|
8
18
|
@name = name || self.class.name
|
9
19
|
@buffer_size = determine_buffer_size(buffer_size)
|
10
20
|
super(nil, shift_age, shift_size, **opts)
|
@@ -92,7 +102,9 @@ module Betterlog
|
|
92
102
|
s = 0
|
93
103
|
e = @redis.strlen(name_tmp) - 1
|
94
104
|
until s > e
|
95
|
-
|
105
|
+
range = @redis.getrange(name_tmp, s, s + chunk_size - 1)
|
106
|
+
range.force_encoding 'ASCII-8BIT'
|
107
|
+
y.yield range
|
96
108
|
s += chunk_size
|
97
109
|
end
|
98
110
|
|
@@ -115,9 +127,10 @@ module Betterlog
|
|
115
127
|
chunk_size > 0 or raise ArgumentError, 'chunk_size > 0 required'
|
116
128
|
Enumerator.new do |y|
|
117
129
|
buffer = ''
|
130
|
+
buffer.encode! 'ASCII-8BIT'
|
118
131
|
each_chunk(chunk_size: chunk_size) do |chunk|
|
119
132
|
buffer << chunk
|
120
|
-
buffer.gsub!(/\A(.*?#$/)/) do |line|
|
133
|
+
buffer.gsub!(/\A(.*?#$/)/n) do |line|
|
121
134
|
y.yield(line)
|
122
135
|
''
|
123
136
|
end
|
data/lib/betterlog/railtie.rb
CHANGED
data/lib/betterlog/version.rb
CHANGED
data/spec/betterlog/log_spec.rb
CHANGED
@@ -26,6 +26,17 @@ describe Betterlog::Log do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
describe 'Log::Event.to_json' do
|
30
|
+
it 'can be called' do
|
31
|
+
expect(event.to_json).to be_present
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'can handle invalid UTF-8 characters' do
|
35
|
+
event = Log::Event.ify("foo\xCEbar")
|
36
|
+
expect(event.to_json).to eq(JSON(severity: "DEBUG", message: 'foobar'))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
29
40
|
describe '.parse' do
|
30
41
|
it 'can parse an event as a JSON document' do
|
31
42
|
expect(Log::Event.parse(event.to_json)).to eq event
|
data/spec/spec_helper.rb
CHANGED
@@ -9,5 +9,11 @@ begin
|
|
9
9
|
require 'byebug'
|
10
10
|
rescue LoadError
|
11
11
|
end
|
12
|
+
require 'mock_redis'
|
13
|
+
class MockRedis
|
14
|
+
class BaseConnectionError < StandardError; end
|
15
|
+
class CannotConnectError < BaseConnectionError; end
|
16
|
+
end
|
17
|
+
Redis=MockRedis
|
12
18
|
require 'betterlog'
|
13
19
|
Betterlog::Log.default_logger = Logger.new(nil)
|
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.15.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- betterplace Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mock_redis
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: tins
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,7 +220,7 @@ extra_rdoc_files:
|
|
206
220
|
- lib/betterlog/version.rb
|
207
221
|
files:
|
208
222
|
- ".gitignore"
|
209
|
-
- ".
|
223
|
+
- ".semaphore/semaphore.yml"
|
210
224
|
- Dockerfile
|
211
225
|
- Gemfile
|
212
226
|
- LICENSE
|
@@ -267,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
281
|
- !ruby/object:Gem::Version
|
268
282
|
version: '0'
|
269
283
|
requirements: []
|
270
|
-
rubygems_version: 3.
|
284
|
+
rubygems_version: 3.2.5
|
271
285
|
signing_key:
|
272
286
|
specification_version: 4
|
273
287
|
summary: Structured logging support for bp
|