buffered-logger 1.0.1 → 1.0.3

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.
@@ -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: