flnt 0.1.1 → 0.2.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/flnt.gemspec +2 -1
- data/lib/flnt.rb +4 -1
- data/lib/flnt/logger.rb +33 -1
- data/lib/flnt/teeable_logger.rb +20 -0
- data/lib/flnt/version.rb +1 -1
- data/spec/lib/flnt/logger_spec.rb +1 -0
- data/spec/lib/flnt/teeable_logger_spec.rb +53 -0
- data/spec/lib/flnt_spec.rb +32 -25
- data/spec/spec_helper.rb +6 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b571a4742a35bac7d8b9b94fdd9f764ba19d3f95
|
4
|
+
data.tar.gz: 6795af010a0846ef8250a3a27fb64b292cc4baab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04d5b1811f70c88b598ad5690565dff3a259dd741543c885848f7cc91f2f93467bedce0282003ac55a21cb6e0ba73d3f313f434ddd929fef24184f61d49efc0d
|
7
|
+
data.tar.gz: f1f7dedc3d305b4a255a72fa53479a2ad70c3d848369b70f79b8a5c3c678757ed5c9573f2188d3bd53b9ecff5e82906a79253343d1b7c47dd2cd4b96f84ef03a
|
data/flnt.gemspec
CHANGED
@@ -24,5 +24,6 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "pry"
|
26
26
|
|
27
|
-
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "rspec", ">= 3.1"
|
28
|
+
spec.add_development_dependency "rspec-mocks"
|
28
29
|
end
|
data/lib/flnt.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "flnt/version"
|
2
2
|
require "flnt/logger"
|
3
|
+
require "flnt/teeable_logger"
|
3
4
|
require "flnt/configuration"
|
4
5
|
|
5
6
|
module Flnt
|
@@ -10,7 +11,9 @@ module Flnt
|
|
10
11
|
(BasicObject.instance_methods + BasicObject.private_instance_methods)).
|
11
12
|
delete_if {|method_name| method_name.to_s =~ /([\-\[\]\/~=+*&|%<>!?])/}.
|
12
13
|
each do |target_method|
|
13
|
-
|
14
|
+
|
15
|
+
# Also pass the :singleton_class to avoid rspec stubbing errors
|
16
|
+
unless [:singleton_class, :object_id].include?(target_method.to_sym)
|
14
17
|
eval %Q(undef #{target_method})
|
15
18
|
end
|
16
19
|
end
|
data/lib/flnt/logger.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'fluent/logger'
|
2
|
+
require 'logger'
|
3
|
+
require 'pathname'
|
2
4
|
|
3
5
|
module Flnt
|
4
6
|
class Logger < BasicObject
|
@@ -17,7 +19,36 @@ module Flnt
|
|
17
19
|
return self
|
18
20
|
end
|
19
21
|
|
22
|
+
# method caching for common log level name
|
23
|
+
%w(debug info warn error fatal).each do |log_level|
|
24
|
+
define_method log_level do |*args|
|
25
|
+
@tag << "." << log_level.to_s
|
26
|
+
unless args.empty?
|
27
|
+
emit! args.first
|
28
|
+
end
|
29
|
+
|
30
|
+
return self
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
20
34
|
def emit!(arg)
|
35
|
+
::Fluent::Logger.post @tag, to_info!(arg)
|
36
|
+
end
|
37
|
+
|
38
|
+
def tee!(logger_or_path)
|
39
|
+
new_self = TeeableLogger.new(@tag)
|
40
|
+
case
|
41
|
+
when logger_or_path.respond_to?(:info)
|
42
|
+
new_self.teed_logger = logger_or_path
|
43
|
+
when [::String, ::Pathname].include?(logger_or_path.class)
|
44
|
+
l = ::Logger.new(logger_or_path)
|
45
|
+
new_self.teed_logger = l
|
46
|
+
end
|
47
|
+
new_self
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def to_info!(arg)
|
21
52
|
info = {}
|
22
53
|
case arg
|
23
54
|
when ::Hash
|
@@ -31,7 +62,8 @@ module Flnt
|
|
31
62
|
else
|
32
63
|
info[:info] = arg
|
33
64
|
end
|
34
|
-
|
65
|
+
|
66
|
+
info
|
35
67
|
end
|
36
68
|
end
|
37
69
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'flnt/logger'
|
3
|
+
|
4
|
+
module Flnt
|
5
|
+
class TeeableLogger < Flnt::Logger
|
6
|
+
attr_accessor :teed_logger
|
7
|
+
|
8
|
+
def emit!(arg)
|
9
|
+
level = __get_last_tag!
|
10
|
+
level = 'info' unless %w(debug info warn error fatal).include?(level)
|
11
|
+
teed_logger.send(level, arg)
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def __get_last_tag!
|
17
|
+
@tag.split('.').last
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/flnt/version.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Flnt::TeeableLogger' do
|
4
|
+
before do
|
5
|
+
allow(Fluent::Logger::FluentLogger).to receive(:open).with(nil, an_instance_of(Hash))
|
6
|
+
.and_return(instance_double("Fluent::Logger::FluentLogger", :post => true))
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#tee!' do
|
10
|
+
let(:flnt) { Flnt.cool_log }
|
11
|
+
let(:logger) { Logger.new('/dev/null') }
|
12
|
+
let(:new_logger) { flnt.tee!(logger) }
|
13
|
+
|
14
|
+
it 'should set the teed logger' do
|
15
|
+
expect(new_logger.teed_logger).to be(logger)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should tee the log to another logger' do
|
19
|
+
expect(Fluent::Logger).to receive(:post).with("cool_log.info", {message: "Hello from Hell"})
|
20
|
+
expect(logger).to receive(:info).with("Hello from Hell")
|
21
|
+
|
22
|
+
new_logger.info "Hello from Hell"
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'passed just a path' do
|
26
|
+
let(:path) { "/tmp/log-#{$$}.log" }
|
27
|
+
let(:new_logger) { flnt.tee!(path) }
|
28
|
+
|
29
|
+
it 'should create a logger pointing to the path' do
|
30
|
+
expect(new_logger.teed_logger).to be_an_instance_of(Logger)
|
31
|
+
logdev = new_logger.teed_logger.instance_eval { @logdev }
|
32
|
+
expect(logdev.dev.path).to eq path
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'passed just a pathname' do
|
37
|
+
let(:path) do
|
38
|
+
p = Pathname.new("/tmp/log-#{$$}")
|
39
|
+
p.join("app.log")
|
40
|
+
p
|
41
|
+
end
|
42
|
+
let(:new_logger) { flnt.tee!(path) }
|
43
|
+
|
44
|
+
it 'should create a logger pointing to the path' do
|
45
|
+
expect(new_logger.teed_logger).to be_an_instance_of(Logger)
|
46
|
+
logdev = new_logger.teed_logger.instance_eval { @logdev }
|
47
|
+
expect(logdev.dev.path).to eq path.to_s
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# FIXME using fakefs to test real log file
|
53
|
+
end
|
data/spec/lib/flnt_spec.rb
CHANGED
@@ -12,30 +12,37 @@ describe "Flnt" do
|
|
12
12
|
Flnt.init_foo
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
15
|
+
describe 'on connection ok' do
|
16
|
+
before do
|
17
|
+
allow(Fluent::Logger::FluentLogger).to receive(:open).with(nil, an_instance_of(Hash))
|
18
|
+
.and_return(instance_double("Fluent::Logger::FluentLogger", :post => true))
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should initialize fluentd connection just once" do
|
22
|
+
allow(Flnt).to receive(:initialized?).and_return(true)
|
23
|
+
|
24
|
+
expect(Fluent::Logger::FluentLogger).not_to receive(:open)
|
25
|
+
expect(Flnt).not_to receive(:Configuration)
|
26
|
+
Flnt.init_foo
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return Flnt::Logger tagged with called method name" do
|
30
|
+
ret = Flnt.init_foo
|
31
|
+
expect(ret.instance_eval { @tag }).to eq "init_foo"
|
32
|
+
|
33
|
+
expect { ret.chain_bar }.not_to raise_error
|
34
|
+
expect { ret.respond_to? }.to raise_error NoMethodError
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should create a new logger for each call" do
|
38
|
+
logger1 = Flnt.foo_tag
|
39
|
+
logger2 = Flnt.foo_tag
|
40
|
+
expect(logger1.__id__).not_to eq logger2.__id__
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should create a new logger with custom tag" do
|
44
|
+
logger = Flnt.tag!("foo.bar.buz")
|
45
|
+
expect(logger.instance_eval { @tag }).to eq "foo.bar.buz"
|
46
|
+
end
|
40
47
|
end
|
41
48
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
require 'flnt'
|
8
8
|
|
9
9
|
RSpec.configure do |config|
|
10
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
10
|
config.run_all_when_everything_filtered = true
|
12
11
|
config.filter_run :focus if ENV['FOCUS']
|
13
12
|
|
@@ -16,4 +15,10 @@ RSpec.configure do |config|
|
|
16
15
|
# the seed, which is printed after each run.
|
17
16
|
# --seed 1234
|
18
17
|
config.order = 'random'
|
18
|
+
|
19
|
+
config.after :each do
|
20
|
+
Flnt.instance_eval {
|
21
|
+
@initialized = false
|
22
|
+
}
|
23
|
+
end
|
19
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flnt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio KONDO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluent-logger
|
@@ -68,6 +68,20 @@ dependencies:
|
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-mocks
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - '>='
|
@@ -97,9 +111,11 @@ files:
|
|
97
111
|
- lib/flnt.rb
|
98
112
|
- lib/flnt/configuration.rb
|
99
113
|
- lib/flnt/logger.rb
|
114
|
+
- lib/flnt/teeable_logger.rb
|
100
115
|
- lib/flnt/version.rb
|
101
116
|
- spec/lib/flnt/configuration_spec.rb
|
102
117
|
- spec/lib/flnt/logger_spec.rb
|
118
|
+
- spec/lib/flnt/teeable_logger_spec.rb
|
103
119
|
- spec/lib/flnt_spec.rb
|
104
120
|
- spec/spec_helper.rb
|
105
121
|
- wercker.yml
|
@@ -130,5 +146,6 @@ summary: Gentle post-to-fluentd log solution
|
|
130
146
|
test_files:
|
131
147
|
- spec/lib/flnt/configuration_spec.rb
|
132
148
|
- spec/lib/flnt/logger_spec.rb
|
149
|
+
- spec/lib/flnt/teeable_logger_spec.rb
|
133
150
|
- spec/lib/flnt_spec.rb
|
134
151
|
- spec/spec_helper.rb
|