steno 0.0.8 → 0.0.10
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.
- data/bin/steno-prettify +9 -1
- data/lib/steno/json_prettifier.rb +62 -36
- data/lib/steno/version.rb +1 -1
- data/spec/unit/json_prettifier_spec.rb +2 -2
- metadata +14 -14
data/bin/steno-prettify
CHANGED
@@ -10,6 +10,8 @@ require "yajl"
|
|
10
10
|
|
11
11
|
require "steno/json_prettifier"
|
12
12
|
|
13
|
+
Signal.trap("INT") { exit }
|
14
|
+
|
13
15
|
def prettify_io(io, prettifier)
|
14
16
|
lineno = 0
|
15
17
|
io.each_line do |line|
|
@@ -38,6 +40,8 @@ ensure
|
|
38
40
|
f.close if f
|
39
41
|
end
|
40
42
|
|
43
|
+
excluded_fields = []
|
44
|
+
|
41
45
|
option_parser = OptionParser.new do |op|
|
42
46
|
op.banner =<<EOT
|
43
47
|
Usage: steno-prettify [OPTS] [FILE...]
|
@@ -60,12 +64,16 @@ EOT
|
|
60
64
|
puts op
|
61
65
|
exit
|
62
66
|
end
|
67
|
+
|
68
|
+
op.on("-a", "--align", "Omit location and data in order to provide well-aligned logs") do
|
69
|
+
excluded_fields = %w[location data]
|
70
|
+
end
|
63
71
|
end
|
64
72
|
|
65
73
|
option_parser.parse!(ARGV)
|
66
74
|
|
67
75
|
STDOUT.sync = true
|
68
|
-
prettifier = Steno::JsonPrettifier.new
|
76
|
+
prettifier = Steno::JsonPrettifier.new(excluded_fields)
|
69
77
|
|
70
78
|
inputs = ARGV.dup
|
71
79
|
inputs << "-" if inputs.empty?
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "digest/md5"
|
2
|
+
require "set"
|
2
3
|
require "yajl"
|
3
4
|
|
4
5
|
module Steno
|
@@ -6,11 +7,12 @@ end
|
|
6
7
|
|
7
8
|
# Transforms JSON log lines into a more human readable format
|
8
9
|
class Steno::JsonPrettifier
|
10
|
+
FIELD_ORDER = %w[timestamp source process_id thread_id fiber_id location data
|
11
|
+
log_level message]
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
def initialize
|
13
|
+
def initialize(excluded_fields = [])
|
13
14
|
@time_format = "%Y-%m-%d %H:%M:%S.%6N"
|
15
|
+
@excluded_fields = Set.new(excluded_fields)
|
14
16
|
end
|
15
17
|
|
16
18
|
def prettify_line(line)
|
@@ -19,55 +21,79 @@ class Steno::JsonPrettifier
|
|
19
21
|
format_record(json_record)
|
20
22
|
end
|
21
23
|
|
22
|
-
|
24
|
+
protected
|
23
25
|
|
24
26
|
def format_record(record)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
fields = []
|
28
|
+
|
29
|
+
FIELD_ORDER.each do |field_name|
|
30
|
+
next if @excluded_fields.include?(field_name)
|
31
|
+
|
32
|
+
exists = nil
|
33
|
+
pred_meth = "check_#{field_name}".to_sym
|
34
|
+
if respond_to?(pred_meth)
|
35
|
+
exists = send(pred_meth, record)
|
36
|
+
else
|
37
|
+
exists = record.has_key?(field_name)
|
38
|
+
end
|
39
|
+
|
40
|
+
if exists
|
41
|
+
fields << send("format_#{field_name}".to_sym, record)
|
42
|
+
else
|
43
|
+
fields << "-"
|
44
|
+
end
|
30
45
|
end
|
31
46
|
|
32
|
-
|
33
|
-
|
34
|
-
log_level = record["log_level"].upcase
|
35
|
-
else
|
36
|
-
log_level = "-"
|
37
|
-
end
|
47
|
+
fields.join(" ") + "\n"
|
48
|
+
end
|
38
49
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
"tid=%s" % [shortid(record["thread_id"])],
|
43
|
-
"fid=%s" % [shortid(record["fiber_id"])],
|
44
|
-
"%s/%s:%s" % [trim_filename(record["file"]),
|
45
|
-
record["method"] || "-",
|
46
|
-
record["lineno"] || "-"],
|
47
|
-
format_data(record["data"]),
|
48
|
-
"%7s" % [log_level],
|
49
|
-
"--",
|
50
|
-
record["message"] || "-"]
|
50
|
+
def format_timestamp(record)
|
51
|
+
Time.at(record["timestamp"]).strftime(@time_format)
|
52
|
+
end
|
51
53
|
|
52
|
-
|
54
|
+
def format_source(record)
|
55
|
+
"%14s" % record["source"]
|
53
56
|
end
|
54
57
|
|
55
|
-
def
|
56
|
-
|
58
|
+
def format_process_id(record)
|
59
|
+
"pid=%-5s" % [record["process_id"]]
|
60
|
+
end
|
57
61
|
|
58
|
-
|
62
|
+
def format_thread_id(record)
|
63
|
+
"tid=%s" % [shortid(record["thread_id"])]
|
64
|
+
end
|
59
65
|
|
66
|
+
def format_fiber_id(record)
|
67
|
+
"fid=%s" % [shortid(record["fiber_id"])]
|
68
|
+
end
|
69
|
+
|
70
|
+
def check_location(record)
|
71
|
+
%w[file lineno method].reduce(true) { |ok, k| ok && record.has_key?(k) }
|
72
|
+
end
|
73
|
+
|
74
|
+
def format_location(record)
|
75
|
+
parts = record["file"].split("/")
|
76
|
+
|
77
|
+
trimmed_filename = nil
|
60
78
|
if parts.size == 1
|
61
|
-
parts[0]
|
79
|
+
trimmed_filename = parts[0]
|
62
80
|
else
|
63
|
-
parts.slice(-2, 2).join("/")
|
81
|
+
trimmed_filename = parts.slice(-2, 2).join("/")
|
64
82
|
end
|
83
|
+
|
84
|
+
"%s/%s:%s" % [trimmed_filename, record["method"], record["lineno"]]
|
85
|
+
end
|
86
|
+
|
87
|
+
def format_data(record)
|
88
|
+
record["data"].map { |k, v| "#{k}=#{v}" }.join(",")
|
65
89
|
end
|
66
90
|
|
67
|
-
def
|
68
|
-
|
91
|
+
def format_log_level(record)
|
92
|
+
"%7s" % [record["log_level"].upcase]
|
93
|
+
end
|
69
94
|
|
70
|
-
|
95
|
+
def format_message(record)
|
96
|
+
"-- %s" % [record["message"]]
|
71
97
|
end
|
72
98
|
|
73
99
|
def shortid(data)
|
data/lib/steno/version.rb
CHANGED
@@ -21,10 +21,10 @@ describe Steno::JsonPrettifier do
|
|
21
21
|
'fid=\w{4}', # Fiber shortid
|
22
22
|
'filename\/method:line', # Location
|
23
23
|
'test=data', # User supplied data
|
24
|
-
'
|
24
|
+
'INFO', # Level
|
25
25
|
'--',
|
26
26
|
'message', # Log message
|
27
|
-
].join("
|
27
|
+
].join("\s+") + "\n"
|
28
28
|
prettified.should match(exp_regex)
|
29
29
|
end
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steno
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: grape
|
16
|
-
requirement: &
|
16
|
+
requirement: &18015280 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *18015280
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yajl-ruby
|
27
|
-
requirement: &
|
27
|
+
requirement: &18014180 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *18014180
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ci_reporter
|
38
|
-
requirement: &
|
38
|
+
requirement: &18010240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *18010240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rack-test
|
49
|
-
requirement: &
|
49
|
+
requirement: &17993800 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *17993800
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &17989080 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *17989080
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &17978960 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *17978960
|
80
80
|
description: A thread-safe logging library designed to support multiple log destinations.
|
81
81
|
email:
|
82
82
|
- mpage@rbcon.com
|