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 +7 -0
- data/lib/json_event_logger.rb +67 -0
- data/lib/microservice_logging.rb +69 -0
- metadata +46 -0
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: []
|