filum 0.0.2 → 0.1.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/CHANGELOG.md +5 -0
- data/lib/filum/configuration.rb +6 -3
- data/lib/filum/logger.rb +29 -15
- data/lib/filum/version.rb +1 -1
- data/test/integration/logger_test.rb +102 -6
- data/test/test_helper.rb +6 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83e02d7327a627863f95dbdbb6ace5b57e889223
|
4
|
+
data.tar.gz: 0ff4c2261899b313fa192e947ce5acf71de8884f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2acc99b793fd25de85715a9011a142ebba8d71641125e6a46181d03e9ee17358bb60c7caf9b1014f58ad93e3e5bfc8c10ce16510c3df3a1611bdd04a4f976ef9
|
7
|
+
data.tar.gz: 3dd343497653597debccddecae5751cd585af9f52b50fa682eeda9dbe43425518fa21362b051acdb6b09698f5726e5327340646da86dd1cbaf84393a91e3c4f7
|
data/CHANGELOG.md
ADDED
data/lib/filum/configuration.rb
CHANGED
@@ -5,11 +5,14 @@ module Filum
|
|
5
5
|
|
6
6
|
class Configuration
|
7
7
|
|
8
|
-
SETTINGS = [
|
9
|
-
:logfile
|
10
|
-
]
|
8
|
+
SETTINGS = [ :logfile, :context_id_length, :filename_length ]
|
11
9
|
attr_accessor *SETTINGS
|
12
10
|
|
11
|
+
def initialize
|
12
|
+
self.context_id_length = 6
|
13
|
+
self.filename_length = 20
|
14
|
+
end
|
15
|
+
|
13
16
|
end
|
14
17
|
end
|
15
18
|
|
data/lib/filum/logger.rb
CHANGED
@@ -2,28 +2,42 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module Filum
|
4
4
|
class Logger < ::Logger
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super
|
8
|
+
self.formatter = Filum::Logger::Formatter.new
|
9
|
+
end
|
10
|
+
|
5
11
|
def context_id=(context_id)
|
6
12
|
Thread.current[:context_id] = context_id
|
7
13
|
end
|
8
14
|
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
class Formatter < Logger::Formatter
|
16
|
+
def call(severity, timestamp, progname, msg)
|
17
|
+
"#{timestamp} thread_id-#{Thread.current.object_id} [#{formatted_context_id}] #{severity} | #{formatted_calling_file_and_line} | #{msg}\n"
|
18
|
+
end
|
12
19
|
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
private
|
21
|
+
def formatted_context_id
|
22
|
+
context_id.ljust(Filum.config.context_id_length)
|
23
|
+
end
|
16
24
|
|
17
|
-
|
18
|
-
|
19
|
-
|
25
|
+
def context_id
|
26
|
+
Thread.current[:context_id].to_s
|
27
|
+
end
|
20
28
|
|
21
|
-
|
22
|
-
|
23
|
-
|
29
|
+
def formatted_calling_file_and_line
|
30
|
+
filename_length = Filum.config.filename_length
|
31
|
+
truncated_filename_length = filename_length - 3
|
32
|
+
|
33
|
+
_, file, line = calling_code.match(/([\w\.]+)\:(\d+)\:in /).to_a
|
34
|
+
file = "#{file[0,truncated_filename_length]}..." if file.length >= filename_length
|
35
|
+
"#{file}:#{line.ljust(3)}".ljust(filename_length + 4)
|
36
|
+
end
|
24
37
|
|
25
|
-
|
26
|
-
|
38
|
+
def calling_code
|
39
|
+
caller[4]
|
40
|
+
end
|
27
41
|
end
|
28
42
|
end
|
29
|
-
end
|
43
|
+
end
|
data/lib/filum/version.rb
CHANGED
@@ -11,31 +11,127 @@ module Filum
|
|
11
11
|
class LoggerTest < IntegrationTest
|
12
12
|
def test_one_logline
|
13
13
|
test_thread = Thread.new do
|
14
|
-
Filum.logger.context_id = "
|
14
|
+
Filum.logger.context_id = "123456"
|
15
15
|
Worker.process
|
16
16
|
end
|
17
17
|
test_thread.join
|
18
|
-
assert_logged(/\[
|
18
|
+
assert_logged(/\[123456\]/)
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_multiple_threads
|
22
22
|
test_thread1 = Thread.new do
|
23
|
-
Filum.logger.context_id = "
|
23
|
+
Filum.logger.context_id = "23456a"
|
24
24
|
Worker.process
|
25
25
|
end
|
26
26
|
test_thread2 = Thread.new do
|
27
|
-
Filum.logger.context_id = "
|
27
|
+
Filum.logger.context_id = "34567a"
|
28
28
|
Worker.process
|
29
29
|
end
|
30
30
|
test_thread1.join
|
31
31
|
test_thread2.join
|
32
|
-
assert_logged(/\[
|
33
|
-
assert_logged(/\[
|
32
|
+
assert_logged(/\[23456a\]/)
|
33
|
+
assert_logged(/\[34567a\]/)
|
34
34
|
end
|
35
35
|
|
36
|
+
def test_info_string_is_correct
|
37
|
+
Filum.logger.info "Foobar"
|
38
|
+
assert_logged(/Foobar$/)
|
39
|
+
end
|
36
40
|
|
41
|
+
private
|
37
42
|
def assert_logged(regex)
|
38
43
|
assert File.readlines(Filum.config.logfile).grep(regex).size == 1
|
39
44
|
end
|
40
45
|
end
|
46
|
+
|
47
|
+
class LogFormatterTest < IntegrationTest
|
48
|
+
def test_string_format
|
49
|
+
formatter = Filum::Logger::Formatter.new
|
50
|
+
severity = "SEV123"
|
51
|
+
timestamp = "Timestamp123"
|
52
|
+
msg = "My Message"
|
53
|
+
context_id = "context_id"
|
54
|
+
object_id = Thread.current.object_id
|
55
|
+
file_and_line = "file_and_line"
|
56
|
+
formatter.stubs(calling_file_and_line: file_and_line)
|
57
|
+
Thread.current[:context_id] = context_id
|
58
|
+
|
59
|
+
output = formatter.call(severity, timestamp, nil, msg)
|
60
|
+
desired = "#{timestamp} thread_id-#{object_id} [#{context_id}] #{severity} | #{file_and_line} | #{msg}\n"
|
61
|
+
assert_equal desired.strip.hex, output.strip.hex
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_call_calls_formatted_context_id
|
65
|
+
formatter = Filum::Logger::Formatter.new
|
66
|
+
formatter.expects(:formatted_context_id)
|
67
|
+
formatter.call("", "", "", "")
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_formatted_context_id_uses_config
|
71
|
+
Filum.config.context_id_length = 20
|
72
|
+
context_id = "12345"
|
73
|
+
Thread.current[:context_id] = context_id
|
74
|
+
formatter = Filum::Logger::Formatter.new
|
75
|
+
output = formatter.send(:formatted_context_id)
|
76
|
+
assert_equal "#{context_id} ", output
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_call_calls_formatted_calling_file_and_line
|
80
|
+
formatter = Filum::Logger::Formatter.new
|
81
|
+
formatter.expects(:formatted_calling_file_and_line)
|
82
|
+
formatter.call("", "", "", "")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_call_should_not_truncate_context_id
|
86
|
+
context_id = "context_id"
|
87
|
+
Thread.current[:context_id] = context_id
|
88
|
+
formatter = Filum::Logger::Formatter.new
|
89
|
+
output = formatter.send(:formatted_context_id)
|
90
|
+
assert_equal context_id, output
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_call_should_return_fixed_width_context_id
|
94
|
+
context_id = "1234"
|
95
|
+
Thread.current[:context_id] = context_id
|
96
|
+
formatter = Filum::Logger::Formatter.new
|
97
|
+
output = formatter.send(:formatted_context_id)
|
98
|
+
assert_equal "#{context_id} ", output
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_calling_file_and_line_parses_correctly
|
102
|
+
formatter = Filum::Logger::Formatter.new
|
103
|
+
line = "/Users/iHiD/Projects/meducation/filum/lib/filum/logger.rb:30:in `formatted_calling_file_and_line'"
|
104
|
+
formatter.stubs(calling_code: line)
|
105
|
+
output = formatter.send(:formatted_calling_file_and_line)
|
106
|
+
assert output =~ /logger\.rb:30\s*/
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_formatted_calling_file_and_line_uses_config
|
110
|
+
Filum.config.filename_length = 40
|
111
|
+
filename = "abcdefghij"
|
112
|
+
line = "/Users/iHiD/Projects/meducation/filum/lib/filum/#{filename}:30:in `formatted_calling_file_and_line'"
|
113
|
+
formatter = Filum::Logger::Formatter.new
|
114
|
+
formatter.stubs(calling_code: line)
|
115
|
+
output = formatter.send(:formatted_calling_file_and_line)
|
116
|
+
assert_equal "#{filename}:30 #{" " * 30}", output
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_formatted_calling_file_and_line_should_truncate
|
120
|
+
filename = "abcdefghijklmnopqrstuvwxyz1234"
|
121
|
+
line = "/Users/iHiD/Projects/meducation/filum/lib/filum/#{filename}:30:in `formatted_calling_file_and_line'"
|
122
|
+
formatter = Filum::Logger::Formatter.new
|
123
|
+
formatter.stubs(calling_code: line)
|
124
|
+
output = formatter.send(:formatted_calling_file_and_line)
|
125
|
+
assert_equal "abcdefghijklmnopq...:30 ", output
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_formatted_calling_file_and_line_should_pad
|
129
|
+
filename = "foobar.txt"
|
130
|
+
line = "/Users/iHiD/Projects/meducation/filum/lib/filum/#{filename}:30:in `formatted_calling_file_and_line'"
|
131
|
+
formatter = Filum::Logger::Formatter.new
|
132
|
+
formatter.stubs(calling_code: line)
|
133
|
+
output = formatter.send(:formatted_calling_file_and_line)
|
134
|
+
assert_equal "foobar.txt:30 ", output
|
135
|
+
end
|
136
|
+
end
|
41
137
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MalcyL
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11
|
11
|
+
date: 2013-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,6 +88,7 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- .gitignore
|
91
|
+
- CHANGELOG.md
|
91
92
|
- Gemfile
|
92
93
|
- LICENSE.md
|
93
94
|
- README.md
|
@@ -122,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
123
|
version: '0'
|
123
124
|
requirements: []
|
124
125
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.1.9
|
126
127
|
signing_key:
|
127
128
|
specification_version: 4
|
128
129
|
summary: Identifies the context of log lines using a context id stored in Thread local
|