semlogr 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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