structured-event-logger 0.0.2 → 0.0.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 +15 -0
- data/README.md +6 -6
- data/Rakefile +12 -1
- data/lib/structured_event_logger.rb +3 -2
- data/lib/structured_event_logger/version.rb +2 -2
- data/test/structured_event_logger_test.rb +25 -4
- metadata +5 -19
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZDcyNDFkNzJlNWFlYTc0NzUxNDE5YzNhMmE3MjgzNmRiOTUwYTlmYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTE4MDdiMDZjNWJmOTAwODk2YTE5YWJiZTMwMjQ1YjA0N2I4NjQ1MA==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MTQwNmQzNGJmMjdjNTZiY2I3ZjYwMjA5NWY4ZGE0NjY0MTk3MWJjM2U1ZWI5
|
10
|
+
OGM2Mzc0MjA1NDdmOTE3NjFjYmJhN2ZmNjI4OGNlN2RjYjk3OTk0YmQ4NzU2
|
11
|
+
MWE0MmRmY2VhOTMzYjczYWYzMmZkMjE0NDhmMzdkYjNiMzc0ZDc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NWZmMTMyMWU2NWVmZjBiMjJlOTNhODQ0NjVjMmQyM2ZiYmFhOWU2MjM0Mzhi
|
14
|
+
YzVlYWFhNDdkZmYxMGY3OTliNzZiNjMzM2VjMmQ0MDRkOTMxNmJlMzIwNGQw
|
15
|
+
OTQwOGZjNzU2NjA3MmY1NGM3MzlmNjIxMWYzYThlNjJjNWU0NmI=
|
data/README.md
CHANGED
@@ -19,23 +19,23 @@ Or install it yourself as:
|
|
19
19
|
## Usage
|
20
20
|
|
21
21
|
# Creating an instance
|
22
|
-
json_logger =
|
22
|
+
json_logger = File.open(Rails.root.join("log", "event.log"), "a")
|
23
23
|
human_readable_logger = Rails.logger
|
24
24
|
event_logger = StructuredEventLogger.new(json_logger, human_readable_logger)
|
25
25
|
|
26
26
|
# Basic usage
|
27
|
-
event_logger.event('scope', event, field: 'value', other_field
|
27
|
+
event_logger.event('scope', event, field: 'value', other_field: 'other value')
|
28
28
|
|
29
29
|
# Add context per thread/request (e.g. in an around_filter)
|
30
30
|
around_filter do
|
31
|
-
event_logger.
|
31
|
+
event_logger.context[:my_value] = 'whatever'
|
32
32
|
yield
|
33
|
-
event_logger.
|
33
|
+
event_logger.context.delete(:my_value)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
# later, while processing a request inside that filter
|
37
37
|
event_logger.event('scope', 'event', other_value: 'blah') # will also include { my_value: 'whatever' }
|
38
|
-
|
38
|
+
|
39
39
|
## Contributing
|
40
40
|
|
41
41
|
1. Fork it
|
data/Rakefile
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
2
|
require 'rake/testtask'
|
3
|
-
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
|
5
|
+
gemspec = eval(File.read('structured-event-logger.gemspec'))
|
6
|
+
Gem::PackageTask.new(gemspec) do |pkg|
|
7
|
+
pkg.gem_spec = gemspec
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Build the gem and release it to rubygems.org"
|
11
|
+
task :release => :gem do
|
12
|
+
sh "gem push pkg/structured-event-logger-#{gemspec.version}.gem"
|
13
|
+
end
|
14
|
+
|
4
15
|
Rake::TestTask.new(:test) do |t|
|
5
16
|
t.test_files = Dir.glob('test/**/*_test.rb')
|
6
17
|
t.libs << 'test'
|
@@ -11,11 +11,12 @@ class StructuredEventLogger
|
|
11
11
|
CYAN = "\e[36m"
|
12
12
|
WHITE = "\e[37m"
|
13
13
|
|
14
|
-
attr_reader :json_io, :unstructured_logger, :colorize_logging
|
14
|
+
attr_reader :json_io, :unstructured_logger, :colorize_logging, :default_context
|
15
15
|
|
16
16
|
def initialize(json_io, unstructured_logger = nil)
|
17
17
|
@json_io, @unstructured_logger = json_io, unstructured_logger
|
18
18
|
@thread_contexts = {}
|
19
|
+
@default_context = {}
|
19
20
|
@colorize_logging = ActiveSupport::LogSubscriber.colorize_logging
|
20
21
|
end
|
21
22
|
|
@@ -68,7 +69,7 @@ class StructuredEventLogger
|
|
68
69
|
def log_event(scope, event, hash)
|
69
70
|
unstructured_logger.add(nil, format_hash(scope, event, hash)) if unstructured_logger
|
70
71
|
|
71
|
-
hash = hash.merge(context)
|
72
|
+
hash = hash.merge(@default_context.merge(context))
|
72
73
|
hash.update(event: event, scope: scope, timestamp: Time.now.utc)
|
73
74
|
json_io.write("#{MultiJson.encode(hash)}\n")
|
74
75
|
end
|
@@ -1,3 +1,3 @@
|
|
1
1
|
class StructuredEventLogger
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.3"
|
3
|
+
end
|
@@ -9,7 +9,7 @@ class StructuredEventLoggerTest < Minitest::Test
|
|
9
9
|
@unstructured_logger = Logger.new(@nonstructured_io = StringIO.new)
|
10
10
|
@unstructured_logger.formatter = proc { |_, _, _, msg| "#{msg}\n" }
|
11
11
|
@event_logger = StructuredEventLogger.new(@json_io, @unstructured_logger)
|
12
|
-
@time = Time.parse('2012-01-
|
12
|
+
@time = Time.parse('2012-01-01T05:00:00Z')
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_should_log_msg_to_buffered_logger
|
@@ -50,10 +50,31 @@ class StructuredEventLoggerTest < Minitest::Test
|
|
50
50
|
assert_equal "{\"request_id\":\"2\",\"event\":\"error\",\"scope\":\"render\",\"timestamp\":\"2012-01-01T05:00:00Z\"}\n", @json_io.string
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
53
|
+
def assert_event_contains_value(value, key)
|
54
|
+
@event_logger.event :some_scope, :some_event
|
55
|
+
assert_equal value, JSON.parse(@json_io.string)[key.to_s]
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_default_context_gets_merged
|
59
|
+
@event_logger.default_context[:foo] = 42
|
60
|
+
assert_event_contains_value 42, :foo
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_default_context_values_can_be_overriden
|
64
|
+
@event_logger.default_context[:foo] = 42
|
65
|
+
@event_logger.context[:foo] = 43
|
66
|
+
assert_event_contains_value 43, :foo
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_default_context_gets_merged_again_after_clear
|
70
|
+
@event_logger.default_context[:foo] = 42
|
71
|
+
@event_logger.context.clear
|
72
|
+
assert_event_contains_value 42, :foo
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_should_clear_context
|
54
76
|
Timecop.travel(@time) do
|
55
|
-
|
56
|
-
Thread.new do
|
77
|
+
Thread.new do
|
57
78
|
@event_logger.context[:request_id] = '1'
|
58
79
|
@event_logger.event :render, :in_thread
|
59
80
|
@event_logger.context.clear
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: structured-event-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Emilie Noel
|
@@ -11,12 +10,11 @@ authors:
|
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date: 2013-
|
13
|
+
date: 2013-08-08 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: activesupport
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
18
|
requirements:
|
21
19
|
- - ~>
|
22
20
|
- !ruby/object:Gem::Version
|
@@ -24,7 +22,6 @@ dependencies:
|
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
25
|
requirements:
|
29
26
|
- - ~>
|
30
27
|
- !ruby/object:Gem::Version
|
@@ -32,7 +29,6 @@ dependencies:
|
|
32
29
|
- !ruby/object:Gem::Dependency
|
33
30
|
name: multi_json
|
34
31
|
requirement: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
32
|
requirements:
|
37
33
|
- - ! '>='
|
38
34
|
- !ruby/object:Gem::Version
|
@@ -40,7 +36,6 @@ dependencies:
|
|
40
36
|
type: :runtime
|
41
37
|
prerelease: false
|
42
38
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
39
|
requirements:
|
45
40
|
- - ! '>='
|
46
41
|
- !ruby/object:Gem::Version
|
@@ -48,7 +43,6 @@ dependencies:
|
|
48
43
|
- !ruby/object:Gem::Dependency
|
49
44
|
name: bundler
|
50
45
|
requirement: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
46
|
requirements:
|
53
47
|
- - ~>
|
54
48
|
- !ruby/object:Gem::Version
|
@@ -56,7 +50,6 @@ dependencies:
|
|
56
50
|
type: :development
|
57
51
|
prerelease: false
|
58
52
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
53
|
requirements:
|
61
54
|
- - ~>
|
62
55
|
- !ruby/object:Gem::Version
|
@@ -64,7 +57,6 @@ dependencies:
|
|
64
57
|
- !ruby/object:Gem::Dependency
|
65
58
|
name: rake
|
66
59
|
requirement: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
60
|
requirements:
|
69
61
|
- - ! '>='
|
70
62
|
- !ruby/object:Gem::Version
|
@@ -72,7 +64,6 @@ dependencies:
|
|
72
64
|
type: :development
|
73
65
|
prerelease: false
|
74
66
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
67
|
requirements:
|
77
68
|
- - ! '>='
|
78
69
|
- !ruby/object:Gem::Version
|
@@ -80,7 +71,6 @@ dependencies:
|
|
80
71
|
- !ruby/object:Gem::Dependency
|
81
72
|
name: minitest
|
82
73
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
74
|
requirements:
|
85
75
|
- - ~>
|
86
76
|
- !ruby/object:Gem::Version
|
@@ -88,7 +78,6 @@ dependencies:
|
|
88
78
|
type: :development
|
89
79
|
prerelease: false
|
90
80
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
81
|
requirements:
|
93
82
|
- - ~>
|
94
83
|
- !ruby/object:Gem::Version
|
@@ -96,7 +85,6 @@ dependencies:
|
|
96
85
|
- !ruby/object:Gem::Dependency
|
97
86
|
name: timecop
|
98
87
|
requirement: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
88
|
requirements:
|
101
89
|
- - ! '>='
|
102
90
|
- !ruby/object:Gem::Version
|
@@ -104,7 +92,6 @@ dependencies:
|
|
104
92
|
type: :development
|
105
93
|
prerelease: false
|
106
94
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
95
|
requirements:
|
109
96
|
- - ! '>='
|
110
97
|
- !ruby/object:Gem::Version
|
@@ -131,27 +118,26 @@ files:
|
|
131
118
|
homepage: https://github.com/Shopify/structured-event-logger
|
132
119
|
licenses:
|
133
120
|
- MIT
|
121
|
+
metadata: {}
|
134
122
|
post_install_message:
|
135
123
|
rdoc_options: []
|
136
124
|
require_paths:
|
137
125
|
- lib
|
138
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
-
none: false
|
140
127
|
requirements:
|
141
128
|
- - ! '>='
|
142
129
|
- !ruby/object:Gem::Version
|
143
130
|
version: '0'
|
144
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
132
|
requirements:
|
147
133
|
- - ! '>='
|
148
134
|
- !ruby/object:Gem::Version
|
149
135
|
version: '0'
|
150
136
|
requirements: []
|
151
137
|
rubyforge_project:
|
152
|
-
rubygems_version:
|
138
|
+
rubygems_version: 2.0.6
|
153
139
|
signing_key:
|
154
|
-
specification_version:
|
140
|
+
specification_version: 4
|
155
141
|
summary: Structured event logger that writes events to both a human readable log and
|
156
142
|
a JSON formatted log
|
157
143
|
test_files:
|