semlogr 0.2.2 → 0.2.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/CHANGELOG.md +6 -0
- data/lib/semlogr.rb +1 -0
- data/lib/semlogr/config/logger_config.rb +48 -0
- data/lib/semlogr/config/sink_config.rb +44 -0
- data/lib/semlogr/enrichers/event_type.rb +13 -0
- data/lib/semlogr/events/log_event.rb +5 -0
- data/lib/semlogr/formatters/json_formatter.rb +0 -1
- data/lib/semlogr/log_severity.rb +2 -0
- data/lib/semlogr/logger.rb +6 -12
- data/lib/semlogr/sinks/enriching.rb +15 -0
- data/lib/semlogr/version.rb +1 -1
- data/samples/sinks.rb +4 -1
- data/semlogr.gemspec +1 -0
- metadata +21 -5
- data/lib/semlogr/enrichers/aggregate.rb +0 -15
- data/lib/semlogr/logger_configuration.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9b9b3d946fba51274115cf720b6f7170d3975582617a8da5224e911d266fdc78
|
4
|
+
data.tar.gz: a83c60b4b86d5c0c63ded34b4660876ff8c38e0d41ad7427876a7d5671a4606c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 494fb5ae48cb228372ca7e3ec7d2225fdec427103cc21cf6dc71e474dfc5c5a8bd413252c00eca2b3e6d9987d5499b317618a9e263f1026e08659635a02c1d73
|
7
|
+
data.tar.gz: f11c82c03c5d50bafc633e93247213c2699c1fc94f0c6061a2b0ce2ccb78c96ede6be547174b31acaa147a870ddf7943fe2a76abc082ab075a0adc3b55b7456e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### 0.2.3
|
4
|
+
|
5
|
+
* Add ability to configure sinks with it's own min severity, filters and enrichers.
|
6
|
+
* Add enricher to tag log events with an event type, based on a hash of the template text.
|
7
|
+
* Some pipeline cleanup and refactoring.
|
8
|
+
|
3
9
|
### 0.2.2
|
4
10
|
|
5
11
|
* Fix bug introduced by 0.2.1 where the severity was being wrapped in quotes in console output
|
data/lib/semlogr.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'semlogr/component_registry'
|
2
|
+
require 'semlogr/sinks/aggregate'
|
3
|
+
require 'semlogr/sinks/enriching'
|
4
|
+
require 'semlogr/sinks/filtering'
|
5
|
+
require 'semlogr/config/sink_config'
|
6
|
+
require 'semlogr/logger'
|
7
|
+
require 'semlogr/log_severity'
|
8
|
+
|
9
|
+
module Semlogr
|
10
|
+
module Config
|
11
|
+
class LoggerConfig
|
12
|
+
def initialize
|
13
|
+
@min_severity = LogSeverity::DEBUG
|
14
|
+
@enrichers = []
|
15
|
+
@filters = []
|
16
|
+
@sinks = []
|
17
|
+
end
|
18
|
+
|
19
|
+
def log_at(severity)
|
20
|
+
@min_severity = LogSeverity.create(severity)
|
21
|
+
end
|
22
|
+
|
23
|
+
def filter(filter)
|
24
|
+
@filters << filter
|
25
|
+
end
|
26
|
+
|
27
|
+
def enrich_with(enricher, *params)
|
28
|
+
enricher = ComponentRegistry.resolve(:enricher, enricher, *params) if enricher.is_a?(Symbol)
|
29
|
+
@enrichers << enricher
|
30
|
+
end
|
31
|
+
|
32
|
+
def write_to(sink, *params)
|
33
|
+
sink_config = SinkConfig.new
|
34
|
+
yield(sink_config) if block_given?
|
35
|
+
|
36
|
+
@sinks << sink_config.create_sink(sink, *params)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_logger
|
40
|
+
sink = Sinks::Aggregate.new(@sinks)
|
41
|
+
sink = Sinks::Filtering.new(@filters, sink) if @filters.any?
|
42
|
+
sink = Sinks::Enriching.new(@enrichers, sink) if @enrichers.any?
|
43
|
+
|
44
|
+
Logger.new(@min_severity, sink)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'semlogr/component_registry'
|
2
|
+
require 'semlogr/sinks/enriching'
|
3
|
+
require 'semlogr/sinks/filtering'
|
4
|
+
require 'semlogr/log_severity'
|
5
|
+
|
6
|
+
module Semlogr
|
7
|
+
module Config
|
8
|
+
class SinkConfig
|
9
|
+
def initialize
|
10
|
+
@min_severity = LogSeverity::DEBUG
|
11
|
+
@enrichers = []
|
12
|
+
@filters = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def emit_at(severity)
|
16
|
+
@min_severity = LogSeverity.create(severity)
|
17
|
+
end
|
18
|
+
|
19
|
+
def filter(filter)
|
20
|
+
@filters << filter
|
21
|
+
end
|
22
|
+
|
23
|
+
def enrich_with(enricher, *params)
|
24
|
+
enricher = ComponentRegistry.resolve(:enricher, enricher, *params) if enricher.is_a?(Symbol)
|
25
|
+
@enrichers << enricher
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_sink(sink, *params)
|
29
|
+
if sink.is_a?(Symbol)
|
30
|
+
sink = ComponentRegistry.resolve(:sink, sink, *params)
|
31
|
+
end
|
32
|
+
|
33
|
+
if @min_severity > LogSeverity::DEBUG
|
34
|
+
severity_filter = ->(log_event) { log_event.severity < @min_severity }
|
35
|
+
@filters.unshift(severity_filter)
|
36
|
+
end
|
37
|
+
|
38
|
+
sink = Sinks::Filtering.new(@filters, sink) if @filters.any?
|
39
|
+
sink = Sinks::Enriching.new(@enrichers, sink) if @enrichers.any?
|
40
|
+
sink
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'semlogr/component_registry'
|
2
|
+
|
3
|
+
module Semlogr
|
4
|
+
module Enrichers
|
5
|
+
class EventType
|
6
|
+
def enrich(log_event)
|
7
|
+
log_event.add_property_if_absent(event_type: log_event.type)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
ComponentRegistry.register(:enricher, event_type: EventType)
|
12
|
+
end
|
13
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'digest/xxhash'
|
1
2
|
require 'semlogr/templates/parser'
|
2
3
|
|
3
4
|
module Semlogr
|
@@ -39,6 +40,10 @@ module Semlogr
|
|
39
40
|
@template.render(output, @properties)
|
40
41
|
end
|
41
42
|
|
43
|
+
def type
|
44
|
+
@type ||= Digest::XXH32.hexdigest(@template.text)
|
45
|
+
end
|
46
|
+
|
42
47
|
def to_s
|
43
48
|
output = ''
|
44
49
|
|
data/lib/semlogr/log_severity.rb
CHANGED
data/lib/semlogr/logger.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
|
-
require 'semlogr/
|
1
|
+
require 'semlogr/config/logger_config'
|
2
2
|
require 'semlogr/log_severity'
|
3
3
|
require 'semlogr/events/log_event'
|
4
|
+
require 'semlogr/sinks/enriching'
|
4
5
|
require 'semlogr/enrichers/property'
|
5
|
-
require 'semlogr/enrichers/aggregate'
|
6
6
|
|
7
7
|
module Semlogr
|
8
8
|
class Logger
|
9
|
-
def initialize(min_severity,
|
9
|
+
def initialize(min_severity, sink)
|
10
10
|
@min_severity = min_severity
|
11
|
-
@enricher = enricher
|
12
11
|
@sink = sink
|
13
12
|
end
|
14
13
|
|
15
14
|
def self.create
|
16
|
-
config =
|
15
|
+
config = Config::LoggerConfig.new
|
17
16
|
yield(config)
|
18
17
|
|
19
18
|
config.create_logger
|
@@ -61,13 +60,9 @@ module Semlogr
|
|
61
60
|
|
62
61
|
def with_context(**properties)
|
63
62
|
property_enricher = Enrichers::Property.new(properties)
|
64
|
-
|
63
|
+
sink = Sinks::Enriching.new([property_enricher], @sink)
|
65
64
|
|
66
|
-
Logger.new(
|
67
|
-
@min_severity,
|
68
|
-
enricher,
|
69
|
-
@sink
|
70
|
-
)
|
65
|
+
Logger.new(@min_severity, sink)
|
71
66
|
end
|
72
67
|
|
73
68
|
private
|
@@ -84,7 +79,6 @@ module Semlogr
|
|
84
79
|
end
|
85
80
|
|
86
81
|
log_event = Events::LogEvent.create(severity, template, properties)
|
87
|
-
@enricher.enrich(log_event)
|
88
82
|
@sink.emit(log_event)
|
89
83
|
|
90
84
|
true
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Semlogr
|
2
|
+
module Sinks
|
3
|
+
class Enriching
|
4
|
+
def initialize(enrichers, sink)
|
5
|
+
@enrichers = enrichers
|
6
|
+
@sink = sink
|
7
|
+
end
|
8
|
+
|
9
|
+
def emit(log_event)
|
10
|
+
@enrichers.each { |enricher| enricher.enrich(log_event) }
|
11
|
+
@sink.emit(log_event)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/semlogr/version.rb
CHANGED
data/samples/sinks.rb
CHANGED
@@ -3,7 +3,10 @@ require 'semlogr'
|
|
3
3
|
|
4
4
|
Semlogr.logger = Semlogr::Logger.create do |c|
|
5
5
|
c.write_to :console, formatter: Semlogr::Formatters::JsonFormatter.new
|
6
|
-
|
6
|
+
|
7
|
+
c.write_to :colored_console do |s|
|
8
|
+
s.emit_at :error
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
12
|
Semlogr.info('Customer {id} checked out', id: 123)
|
data/semlogr.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
+
spec.add_dependency 'digest-xxhash', '~> 0.1'
|
22
23
|
spec.add_dependency 'lru_redux', '~> 1.1'
|
23
24
|
spec.add_dependency 'oj', '~> 3.5'
|
24
25
|
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semlogr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Sedich
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: digest-xxhash
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: lru_redux
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,8 +183,10 @@ files:
|
|
169
183
|
- bin/setup
|
170
184
|
- lib/semlogr.rb
|
171
185
|
- lib/semlogr/component_registry.rb
|
186
|
+
- lib/semlogr/config/logger_config.rb
|
187
|
+
- lib/semlogr/config/sink_config.rb
|
172
188
|
- lib/semlogr/context/log_context.rb
|
173
|
-
- lib/semlogr/enrichers/
|
189
|
+
- lib/semlogr/enrichers/event_type.rb
|
174
190
|
- lib/semlogr/enrichers/host.rb
|
175
191
|
- lib/semlogr/enrichers/log_context.rb
|
176
192
|
- lib/semlogr/enrichers/property.rb
|
@@ -182,12 +198,12 @@ files:
|
|
182
198
|
- lib/semlogr/formatters/text_formatter.rb
|
183
199
|
- lib/semlogr/log_severity.rb
|
184
200
|
- lib/semlogr/logger.rb
|
185
|
-
- lib/semlogr/logger_configuration.rb
|
186
201
|
- lib/semlogr/null_logger.rb
|
187
202
|
- lib/semlogr/properties/output_properties.rb
|
188
203
|
- lib/semlogr/sinks/aggregate.rb
|
189
204
|
- lib/semlogr/sinks/colored_console.rb
|
190
205
|
- lib/semlogr/sinks/console.rb
|
206
|
+
- lib/semlogr/sinks/enriching.rb
|
191
207
|
- lib/semlogr/sinks/file.rb
|
192
208
|
- lib/semlogr/sinks/filtering.rb
|
193
209
|
- lib/semlogr/templates/parser.rb
|
@@ -223,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
239
|
version: '0'
|
224
240
|
requirements: []
|
225
241
|
rubyforge_project:
|
226
|
-
rubygems_version: 2.
|
242
|
+
rubygems_version: 2.7.3
|
227
243
|
signing_key:
|
228
244
|
specification_version: 4
|
229
245
|
summary: Semantic logging for Ruby
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'semlogr/component_registry'
|
2
|
-
require 'semlogr/enrichers/aggregate'
|
3
|
-
require 'semlogr/sinks/aggregate'
|
4
|
-
require 'semlogr/sinks/filtering'
|
5
|
-
|
6
|
-
module Semlogr
|
7
|
-
class LoggerConfiguration
|
8
|
-
def initialize
|
9
|
-
@min_severity = LogSeverity::DEBUG
|
10
|
-
@enrichers = []
|
11
|
-
@filters = []
|
12
|
-
@sinks = []
|
13
|
-
end
|
14
|
-
|
15
|
-
def log_at(severity)
|
16
|
-
@min_severity = LogSeverity.create(severity)
|
17
|
-
end
|
18
|
-
|
19
|
-
def filter(filter)
|
20
|
-
@filters << filter
|
21
|
-
end
|
22
|
-
|
23
|
-
def enrich_with(enricher, *params)
|
24
|
-
enricher = ComponentRegistry.resolve(:enricher, enricher, *params) if enricher.is_a?(Symbol)
|
25
|
-
@enrichers << enricher
|
26
|
-
end
|
27
|
-
|
28
|
-
def write_to(sink, *params)
|
29
|
-
sink = ComponentRegistry.resolve(:sink, sink, *params) if sink.is_a?(Symbol)
|
30
|
-
@sinks << sink
|
31
|
-
end
|
32
|
-
|
33
|
-
def create_logger
|
34
|
-
enricher = Enrichers::Aggregate.new(@enrichers)
|
35
|
-
sink = Sinks::Aggregate.new(@sinks)
|
36
|
-
sink = Sinks::Filtering.new(@filters, sink) if @filters.any?
|
37
|
-
|
38
|
-
Logger.new(
|
39
|
-
@min_severity,
|
40
|
-
enricher,
|
41
|
-
sink
|
42
|
-
)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|