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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2df855ceaaff9b2369b0927eafe755540631e5dd
4
- data.tar.gz: 32c4226e07455a16a2554756dbdb5550eb987a25
2
+ SHA256:
3
+ metadata.gz: 9b9b3d946fba51274115cf720b6f7170d3975582617a8da5224e911d266fdc78
4
+ data.tar.gz: a83c60b4b86d5c0c63ded34b4660876ff8c38e0d41ad7427876a7d5671a4606c
5
5
  SHA512:
6
- metadata.gz: cf540cc6b31b8def59a0d5eb02cfa7cc7a69cb93d92706a8797b8d46cf79dab08baf84b9ab58db5328b6768a2a8da6fe65e047bbb04e078baf03e416e96ed0b2
7
- data.tar.gz: 119b61ddf7908134f7f62d5715cca0ef6ae4e2ca90f1b2138726b9c05f52f4ec8738e6714a8eaa78e9cb62859b03d174958891afd4f0c34557bbe3afbc82dce0
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
@@ -4,6 +4,7 @@ require 'semlogr/null_logger'
4
4
  require 'semlogr/context/log_context'
5
5
 
6
6
  # Built-in enrichers
7
+ require 'semlogr/enrichers/event_type'
7
8
  require 'semlogr/enrichers/host'
8
9
  require 'semlogr/enrichers/log_context'
9
10
  require 'semlogr/enrichers/property'
@@ -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
 
@@ -17,7 +17,6 @@ module Semlogr
17
17
  event = {
18
18
  timestamp: log_event.timestamp.iso8601(3),
19
19
  severity: log_event.severity.to_s,
20
- message_template: log_event.template.text,
21
20
  message: log_event.to_s
22
21
  }
23
22
 
@@ -11,6 +11,8 @@ module Semlogr
11
11
 
12
12
  def self.create(severity)
13
13
  case severity
14
+ when LogSeverity
15
+ severity
14
16
  when :debug
15
17
  LogSeverity::DEBUG
16
18
  when :info
@@ -1,19 +1,18 @@
1
- require 'semlogr/logger_configuration'
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, enricher, sink)
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 = LoggerConfiguration.new
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
- enricher = Enrichers::Aggregate.new([@enricher, property_enricher])
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
@@ -1,3 +1,3 @@
1
1
  module Semlogr
2
- VERSION = '0.2.2'.freeze
2
+ VERSION = '0.2.3'.freeze
3
3
  end
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
- c.write_to :colored_console
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.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-03-29 00:00:00.000000000 Z
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/aggregate.rb
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.6.13
242
+ rubygems_version: 2.7.3
227
243
  signing_key:
228
244
  specification_version: 4
229
245
  summary: Semantic logging for Ruby
@@ -1,15 +0,0 @@
1
- module Semlogr
2
- module Enrichers
3
- class Aggregate
4
- def initialize(enrichers)
5
- @enrichers = enrichers
6
- end
7
-
8
- def enrich(log_event)
9
- @enrichers.each do |enricher|
10
- enricher.enrich(log_event)
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -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