buffered-logger 1.0.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ require "buffered_logger"
@@ -1,3 +1,6 @@
1
+ require "fiber"
2
+ require "thread"
3
+
1
4
  class BufferedLogger
2
5
  class LogDeviceProxy
3
6
  def initialize(logdev)
@@ -10,23 +13,35 @@ class BufferedLogger
10
13
  end
11
14
 
12
15
  def end
13
- @logdev.write(@buffers.delete(Thread.current).string)
16
+ @logdev.write(@buffers.delete(key).string)
14
17
  end
15
18
 
16
19
  def start
17
- @buffers[Thread.current] = StringIO.new
20
+ @buffers[key] = StringIO.new
18
21
  end
19
22
 
20
23
  def started?
21
- @buffers.key?(Thread.current)
24
+ @buffers.key?(key)
25
+ end
26
+
27
+ def sweep
28
+ @buffers.keep_if do |key, buffer|
29
+ key.all?(&:alive?)
30
+ end
31
+ true
22
32
  end
23
33
 
24
34
  def write(message)
25
35
  if started?
26
- @buffers[Thread.current].write(message)
36
+ @buffers[key].write(message)
27
37
  else
28
38
  @logdev.write(message)
29
39
  end
30
40
  end
41
+
42
+ private
43
+ def key
44
+ [Thread.current, Fiber.current]
45
+ end
31
46
  end
32
47
  end
@@ -4,6 +4,8 @@ require "rails"
4
4
  class BufferedLogger
5
5
  class Railtie < Rails::Railtie
6
6
  initializer :buffered_logger, :before => :initialize_logger do |app|
7
+ next if app.config.logger
8
+
7
9
  if Rails::VERSION::STRING >= "3.1"
8
10
  path = app.paths["log"].first
9
11
  else
@@ -1,5 +1,5 @@
1
1
  require "logger"
2
2
 
3
3
  class BufferedLogger < Logger
4
- VERSION = "1.0.1"
4
+ VERSION = "1.0.3"
5
5
  end
@@ -6,14 +6,19 @@ class BufferedLogger < Logger
6
6
  require "buffered_logger/middleware"
7
7
  require "buffered_logger/version"
8
8
 
9
+ attr_accessor :sweep_frequency
10
+
9
11
  def initialize(*)
10
12
  super
11
13
  @logdev = LogDeviceProxy.new(@logdev)
14
+ self.sweep_frequency = 0.02
12
15
  end
13
16
 
14
17
  def end
15
18
  raise NotStartedError, "not started" unless started?
16
19
  @logdev.end
20
+ sweep if rand <= sweep_frequency
21
+ nil
17
22
  end
18
23
 
19
24
  def start(&block)
@@ -34,4 +39,8 @@ class BufferedLogger < Logger
34
39
  def started?
35
40
  @logdev.started?
36
41
  end
42
+
43
+ def sweep
44
+ @logdev.sweep
45
+ end
37
46
  end
@@ -1,7 +1,7 @@
1
1
  require "test_helper"
2
2
 
3
3
  describe BufferedLogger::LogDeviceProxy do
4
- def setup
4
+ before do
5
5
  @logdev = mock()
6
6
  @proxy = BufferedLogger::LogDeviceProxy.new(@logdev)
7
7
  end
@@ -42,4 +42,38 @@ describe BufferedLogger::LogDeviceProxy do
42
42
  @proxy.write("3")
43
43
  @proxy.end
44
44
  end
45
+
46
+ describe "sweep" do
47
+ it "should check if the thread and fiber are alive" do
48
+ fiber = mock()
49
+ fiber.expects(:alive?).returns(true)
50
+ thread = mock()
51
+ thread.expects(:alive?).returns(true)
52
+ Fiber.stubs(:current).returns(fiber)
53
+ Thread.stubs(:current).returns(thread)
54
+
55
+ @proxy.start
56
+ @proxy.sweep
57
+ end
58
+
59
+ it "should remove dead threads or fibers" do
60
+ fiber = mock()
61
+ fiber.stubs(:alive?).returns(false)
62
+ thread = mock()
63
+ thread.stubs(:alive?).returns(true)
64
+ Fiber.stubs(:current).returns(fiber)
65
+ Thread.stubs(:current).returns(thread)
66
+
67
+ @proxy.start
68
+ @proxy.sweep
69
+ assert !@proxy.started?
70
+
71
+ fiber.stubs(:alive?).returns(true)
72
+ thread.stubs(:alive?).returns(false)
73
+
74
+ @proxy.start
75
+ @proxy.sweep
76
+ assert !@proxy.started?
77
+ end
78
+ end
45
79
  end
@@ -1,7 +1,7 @@
1
1
  require "test_helper"
2
2
 
3
3
  describe BufferedLogger::Middleware do
4
- def setup
4
+ before do
5
5
  @app = mock()
6
6
  @app.stubs(:call).returns([200, {}, []])
7
7
  @logger = mock()
@@ -1,73 +1,18 @@
1
1
  require "test_helper"
2
2
 
3
- class MockLogDeviceProxy
4
- def initialize
5
- @started = false
6
- end
7
-
8
- def end
9
- @started = false
10
- end
11
-
12
- def start
13
- @started = true
14
-
15
- if block_given?
16
- begin
17
- yield
18
- ensure
19
- @started = false
20
- end
21
- else
22
- true
23
- end
24
- end
25
-
26
- def started?
27
- @started
28
- end
29
- end
30
-
31
3
  describe BufferedLogger do
32
- describe "with MockLogDeviceProxy" do
33
- def setup
34
- @logdev = MockLogDeviceProxy.new
35
- @logger = BufferedLogger.allocate
36
- @logger.instance_variable_set(:@logdev, @logdev)
37
- end
38
-
39
- it "should raise an error if end is called while not started" do
40
- -> { @logger.end }.must_raise(BufferedLogger::NotStartedError)
41
- end
42
-
43
- it "should raise an error if start is called while already started" do
44
- @logger.start
45
- -> { @logger.start }.must_raise(BufferedLogger::AlreadyStartedError)
46
- end
4
+ before do
5
+ @buffer = StringIO.new
6
+ @logger = BufferedLogger.new(@buffer)
47
7
  end
48
8
 
49
- describe "with mock" do
50
- def setup
51
- @logdev = mock()
52
- @logger = BufferedLogger.allocate
53
- @logger.instance_variable_set(:@logdev, @logdev)
54
- end
55
-
56
- it "should call end on logdev" do
57
- @logdev.expects(:end)
58
- @logdev.stubs(:started?).returns(true)
59
- @logger.end
60
- end
61
-
62
- it "should call start on logdev" do
63
- @logdev.expects(:start)
64
- @logdev.stubs(:started?).returns(false)
65
- @logger.start
66
- end
9
+ it "should raise an error if end is called while not started" do
10
+ @logger.stubs(:started?).returns(false)
11
+ -> { @logger.end }.must_raise(BufferedLogger::NotStartedError)
12
+ end
67
13
 
68
- it "should call started? on logdev" do
69
- @logdev.expects(:started?)
70
- @logger.started?
71
- end
14
+ it "should raise an error if start is called while already started" do
15
+ @logger.stubs(:started?).returns(true)
16
+ -> { @logger.start }.must_raise(BufferedLogger::AlreadyStartedError)
72
17
  end
73
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buffered-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-15 00:00:00.000000000 Z
12
+ date: 2012-09-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,15 +43,33 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 0.12.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.2.2
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2.2
46
62
  description: buffered-logger is designed to be used in multithreaded or multifiber
47
63
  rack servers and includes a middleware to automatically capture and write the buffered
48
- log statements during each request.
64
+ log statements during each request. This is ideal for keeping requests together
65
+ for log parsing software such as splunk.
49
66
  email:
50
67
  - samuel@kadolph.com
51
68
  executables: []
52
69
  extensions: []
53
70
  extra_rdoc_files: []
54
71
  files:
72
+ - lib/buffered-logger.rb
55
73
  - lib/buffered_logger/errors.rb
56
74
  - lib/buffered_logger/log_device_proxy.rb
57
75
  - lib/buffered_logger/middleware.rb
@@ -61,7 +79,7 @@ files:
61
79
  - test/buffered_logger/log_device_proxy_test.rb
62
80
  - test/buffered_logger/middleware_test.rb
63
81
  - test/buffered_logger_test.rb
64
- homepage: http://samuelkadolph.github.com/buffered-logger
82
+ homepage: http://samuelkadolph.github.com/buffered-logger/
65
83
  licenses: []
66
84
  post_install_message:
67
85
  rdoc_options: []
@@ -79,6 +97,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
97
  - - ! '>='
80
98
  - !ruby/object:Gem::Version
81
99
  version: '0'
100
+ segments:
101
+ - 0
102
+ hash: -4164329227286823288
82
103
  requirements: []
83
104
  rubyforge_project:
84
105
  rubygems_version: 1.8.24
@@ -90,4 +111,3 @@ test_files:
90
111
  - test/buffered_logger/log_device_proxy_test.rb
91
112
  - test/buffered_logger/middleware_test.rb
92
113
  - test/buffered_logger_test.rb
93
- has_rdoc: