microservice_logging 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 70668c95dde5a8d9eea56520d5656df2a90405ce
4
+ data.tar.gz: 193cdce129fd559b1b29741ae63ccc12185f32db
5
+ SHA512:
6
+ metadata.gz: e53a4fd2861baf3f0b03fbb47ab66c375512fd0e8e9f9af63c58a877a0b73f33dfad6e1c4495211e7681eb2b9f1a414d45a499912bd1df8621b25fe6ecc36bb8
7
+ data.tar.gz: 03c7a91b1c5affe41f47f49a48aa4c988a4dc69257f29b8e956fe9b16fc38ccff28b99aaed57c744e614c77452cdf0eb3370b6bb6babcd6bfa5c6a2ddd0ead2f
@@ -0,0 +1,67 @@
1
+ # A machine-readable first, human-readable second logging library
2
+ class MicroserviceLogger
3
+ class JsonEventLogger
4
+ def initialize(service_name:,
5
+ clock:,
6
+ output:,
7
+ scoped_properties:,
8
+ event_type:)
9
+ @service_name = service_name
10
+ @clock = clock
11
+ @output = output
12
+ @scoped_properties = scoped_properties
13
+ @event_type = event_type
14
+ end
15
+
16
+ def debug(extra_properties)
17
+ log 'DEBUG', normalize(extra_properties)
18
+ end
19
+
20
+ def info(extra_properties)
21
+ log 'INFO', normalize(extra_properties)
22
+ end
23
+
24
+ def warning(extra_properties)
25
+ log 'WARNING', normalize(extra_properties)
26
+ end
27
+
28
+ def error(extra_properties)
29
+ log 'ERROR', normalize(extra_properties)
30
+ end
31
+
32
+ def critical(extra_properties)
33
+ log 'CRITICAL', normalize(extra_properties)
34
+ end
35
+
36
+ private
37
+
38
+ def log(severity, extra_properties)
39
+ properties =
40
+ required_properties(severity)
41
+ .merge(@scoped_properties)
42
+ .merge(extra_properties)
43
+
44
+ @output.puts(properties.to_json)
45
+ end
46
+
47
+ def required_properties(severity)
48
+ {
49
+ service: @service_name,
50
+ event_type: @event_type,
51
+ timestamp: @clock.now.utc.iso8601(3),
52
+ severity: severity
53
+ }
54
+ end
55
+
56
+ def normalize(properties)
57
+ case properties
58
+ when Hash
59
+ properties
60
+ else
61
+ { message: properties.to_s }
62
+ end
63
+ end
64
+ end
65
+
66
+ private_constant :JsonEventLogger
67
+ end
@@ -0,0 +1,69 @@
1
+ require 'json'
2
+ require 'time'
3
+
4
+ require_relative './json_event_logger'
5
+
6
+ # Log all the things in JSON
7
+ class MicroserviceLogger
8
+ def initialize(service_name:,
9
+ clock:,
10
+ output:,
11
+ scoped_properties: {},
12
+ events: DEFAULT_EVENT_TYPES)
13
+ @service_name = service_name
14
+ @clock = clock
15
+ @output = output
16
+ @scoped_properties = scoped_properties
17
+ @event_loggers = {}
18
+ @events = events
19
+ @events.each do |method_name|
20
+ event_type = method_name.to_s
21
+ @event_loggers[method_name] =
22
+ JsonEventLogger.new(:service_name => @service_name,
23
+ :clock => @clock,
24
+ :output => @output,
25
+ :scoped_properties => @scoped_properties,
26
+ :event_type => event_type)
27
+ end
28
+ end
29
+
30
+ def method_missing(event)
31
+ super unless @events.include? event
32
+ @event_loggers[event]
33
+ end
34
+
35
+ DEFAULT_EVENT_TYPES = [
36
+ :http_request,
37
+ :applejack,
38
+ :startup,
39
+ :exception
40
+ ].freeze
41
+
42
+ def with(scoped_properties)
43
+ MicroserviceLogger.new(:service_name => @service_name,
44
+ :clock => @clock,
45
+ :output => @output,
46
+ :scoped_properties => scoped_properties)
47
+ end
48
+
49
+ # The fields 'event_type' and 'serverity' in the JSON output that is logged
50
+ # are not passed as parameters, but as methods.
51
+ #
52
+ # Therefore to log something like
53
+ #
54
+ # logger.log(
55
+ # 'event_type' => 'startup',
56
+ # 'serverity' => 'info',
57
+ # 'other_property' => 'some value',
58
+ # ...
59
+ # )
60
+ #
61
+ # one instead will call
62
+ #
63
+ # logger.startup.info('other_property' => 'some value')
64
+ #
65
+ # The event types are defined on this class.
66
+ #
67
+ # Each of them returns a private JsonEventLogger that in turn has the methods
68
+ # corresponding to the severity levels.
69
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: microservice_logging
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - "@sleepyfox"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A library aiming to help microservice developers with producing structured
14
+ JSON logs suitable for use with StackDriver, ElasticSearch etc.
15
+ email: developers@yourgolftravel.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/json_event_logger.rb
21
+ - lib/microservice_logging.rb
22
+ homepage: https://github.com/ygt/microservice-logging/
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.6.6
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Structured logging for microservices
46
+ test_files: []