yog 0.2.0 → 0.3.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 +4 -4
- data/lib/yog.rb +22 -27
- data/lib/yog/logfmt.rb +1 -1
- data/lib/yog/rack.rb +38 -0
- data/yog.gemspec +2 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db8903f2744b37ff04bc5dd36f44edb790b4878d176fd77a900ff5cef858680b
|
4
|
+
data.tar.gz: 03a96abc9076220df30f0b55be41befb92eee172dc88d0224be0cdad8ce3f732
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46fbe2aa15a5fab09ba295a39fdb9673154a949dbaec4506322ee3d0b36a5b2b89ef337e594386f6c3dffe659c611f6319cc3662bf9caf7033faa716d738a825
|
7
|
+
data.tar.gz: c18237cde2eaf11e02e8cc6ba567709464972e3730b974a29e01c1cdbfda6ed5e3001af87785d15cab5d5b56f39cf372c92555fa883fce0da318699b571ca569
|
data/lib/yog.rb
CHANGED
@@ -15,9 +15,9 @@ class Yog
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# Log a message. Logs any given block's duration as `elapsed=float` ms.
|
18
|
-
def
|
18
|
+
def info(msg, **fields)
|
19
19
|
if @output.nil?
|
20
|
-
return block_given?
|
20
|
+
return (yield if block_given?)
|
21
21
|
end
|
22
22
|
|
23
23
|
if msg.is_a?(Hash)
|
@@ -37,7 +37,7 @@ class Yog
|
|
37
37
|
prefix[:duration] = (Time.now - start) * 1000
|
38
38
|
end
|
39
39
|
|
40
|
-
combined =
|
40
|
+
combined = prefix.merge(@context).merge(fields)
|
41
41
|
@output.puts(@generator.generate(combined))
|
42
42
|
|
43
43
|
result
|
@@ -45,30 +45,30 @@ class Yog
|
|
45
45
|
|
46
46
|
# Log an error.
|
47
47
|
def error(ex, **fields)
|
48
|
-
|
48
|
+
info(error: ex.message, type: ex.class, **fields)
|
49
49
|
end
|
50
50
|
|
51
51
|
# Update the context.
|
52
|
-
def
|
53
|
-
|
52
|
+
def set(**fields)
|
53
|
+
tap { @context.merge!(fields) }
|
54
54
|
end
|
55
55
|
|
56
56
|
# Create a new log with more context.
|
57
57
|
def with(**fields)
|
58
58
|
self.class.new \
|
59
|
-
context:
|
59
|
+
context: @context.merge(fields),
|
60
60
|
generator: @generator,
|
61
61
|
output: @output
|
62
62
|
end
|
63
63
|
|
64
64
|
### Helpers for the default log
|
65
65
|
|
66
|
-
# The log for Yog(), Yog.
|
67
|
-
def self.
|
66
|
+
# The log for Yog(), Yog.set(), and Yog.with().
|
67
|
+
def self.default
|
68
68
|
logs.first
|
69
69
|
end
|
70
70
|
|
71
|
-
# A stack of receivers with the
|
71
|
+
# A stack of receivers with the default log first.
|
72
72
|
def self.logs
|
73
73
|
Thread.current[:logs] ||= [new]
|
74
74
|
end
|
@@ -80,38 +80,33 @@ class Yog
|
|
80
80
|
logs.shift
|
81
81
|
end
|
82
82
|
|
83
|
-
# Update the context of the
|
84
|
-
def self.
|
85
|
-
|
83
|
+
# Update the context of the default log.
|
84
|
+
def self.set(**fields)
|
85
|
+
default.set(fields)
|
86
86
|
end
|
87
87
|
|
88
|
-
# Create a new log by extending the context of the
|
88
|
+
# Create a new log by extending the context of the default log.
|
89
89
|
def self.with(**fields)
|
90
|
-
|
90
|
+
default.with(fields)
|
91
91
|
end
|
92
92
|
|
93
|
-
# Write a line to the
|
94
|
-
def self.
|
95
|
-
|
93
|
+
# Write a line to the default log.
|
94
|
+
def self.info(msg, **fields, &block)
|
95
|
+
default.info(msg, fields, &block)
|
96
96
|
end
|
97
97
|
|
98
|
-
# Log an error to the
|
98
|
+
# Log an error to the default log.
|
99
99
|
def self.error(ex, **fields)
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
# Internal: Combine a list of contexts.
|
104
|
-
def self.merge(*contexts)
|
105
|
-
contexts.inject { |a, b| a.merge(b) }
|
100
|
+
default.error(ex, fields)
|
106
101
|
end
|
107
102
|
end
|
108
103
|
|
109
|
-
# Write a line to the
|
104
|
+
# Write a line to the default log.
|
110
105
|
def Yog(msg, **fields, &block)
|
111
106
|
case msg
|
112
107
|
when Exception
|
113
108
|
Yog.error(msg, fields)
|
114
109
|
else
|
115
|
-
Yog.
|
110
|
+
Yog.info(msg, fields, &block)
|
116
111
|
end
|
117
112
|
end
|
data/lib/yog/logfmt.rb
CHANGED
data/lib/yog/rack.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rack/request"
|
4
|
+
require "rack/utils"
|
5
|
+
require "securerandom"
|
6
|
+
require "yog"
|
7
|
+
|
8
|
+
class Yog
|
9
|
+
class Rack
|
10
|
+
def initialize(app, **ctx)
|
11
|
+
@app = app
|
12
|
+
@ctx = ctx.merge(svc: "rack")
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
now = Time.now
|
17
|
+
req = ::Rack::Request.new(env)
|
18
|
+
rid = (env["HTTP_X_REQUEST_ID"] ||= SecureRandom.uuid)
|
19
|
+
|
20
|
+
Yog.context **@ctx, rid: rid do
|
21
|
+
begin
|
22
|
+
res = @app.call(env)
|
23
|
+
ensure
|
24
|
+
duration = (Time.now - now) * 1000
|
25
|
+
status, headers, * = res
|
26
|
+
headers["X-Request-ID"] ||= rid
|
27
|
+
|
28
|
+
Yog ::Rack::Utils::HTTP_STATUS_CODES[status],
|
29
|
+
at: "finish",
|
30
|
+
method: req.request_method,
|
31
|
+
path: req.fullpath,
|
32
|
+
status: status,
|
33
|
+
duration: duration
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/yog.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "yog"
|
3
|
-
spec.version = "0.
|
3
|
+
spec.version = "0.3.0"
|
4
4
|
spec.authors = ["John Barnette"]
|
5
5
|
spec.email = ["john@jbarnette.com"]
|
6
6
|
|
7
|
-
spec.summary = "A
|
7
|
+
spec.summary = "A Ruby library for emitting logfmt style log lines."
|
8
8
|
spec.homepage = "https://github.com/jbarnette/yog"
|
9
9
|
spec.license = "MIT"
|
10
10
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Barnette
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- docs/CODE_OF_CONDUCT.md
|
102
102
|
- lib/yog.rb
|
103
103
|
- lib/yog/logfmt.rb
|
104
|
+
- lib/yog/rack.rb
|
104
105
|
- yog.gemspec
|
105
106
|
homepage: https://github.com/jbarnette/yog
|
106
107
|
licenses:
|
@@ -125,5 +126,5 @@ rubyforge_project:
|
|
125
126
|
rubygems_version: 2.7.3
|
126
127
|
signing_key:
|
127
128
|
specification_version: 4
|
128
|
-
summary: A
|
129
|
+
summary: A Ruby library for emitting logfmt style log lines.
|
129
130
|
test_files: []
|