logster 2.0.1 → 2.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 +3 -0
- data/lib/logster/defer_logger.rb +14 -0
- data/lib/logster/logger.rb +7 -2
- data/lib/logster/rails/railtie.rb +7 -1
- data/lib/logster/scheduler.rb +40 -0
- data/lib/logster/version.rb +1 -1
- data/test/logster/test_defer_logger.rb +34 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 484138ca4f1b5b9212316516f8aca1ea2c062f658da58d0f39556780407f9515
|
4
|
+
data.tar.gz: f341af6a072b39c1ce7d2b1ed33c0971cc2797509db10a88205566f60c30df96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0037037f85b24ffb9b668555b262114b17d1b8eb9c40132030db9e641401384de993d7c6b31fad715c62d6c5b655f746f9504de2400b16e37c15733e4cb65c8
|
7
|
+
data.tar.gz: 86671e65478cc95e12dd6babb49bfd37cf0a919d8a4e7b7f73c981ead3e3b93b4fb37756330359ad914983f2ee526c36ad2e158897ad13f64b910a40f590e55f
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'logster/scheduler'
|
2
|
+
|
3
|
+
module Logster
|
4
|
+
class DeferLogger < ::Logster::Logger
|
5
|
+
private
|
6
|
+
|
7
|
+
def report_to_store(severity, progname, message, opts = {})
|
8
|
+
opts[:backtrace] ||= caller
|
9
|
+
Logster::Scheduler.schedule do
|
10
|
+
super(severity, progname, message, opts)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/logster/logger.rb
CHANGED
@@ -98,11 +98,16 @@ module Logster
|
|
98
98
|
opts ||= {}
|
99
99
|
opts[:env] ||= Thread.current[LOGSTER_ENV]
|
100
100
|
|
101
|
-
|
102
|
-
|
101
|
+
report_to_store(severity, progname, message, opts)
|
103
102
|
rescue => e
|
104
103
|
# don't blow up if STDERR is somehow closed
|
105
104
|
STDERR.puts "Failed to report error: #{e} #{severity} #{message} #{progname}" rescue nil
|
106
105
|
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def report_to_store(severity, progname, message, opts = {})
|
110
|
+
@store.report(severity, progname, message, opts)
|
111
|
+
end
|
107
112
|
end
|
108
113
|
end
|
@@ -13,7 +13,13 @@ module Logster::Rails
|
|
13
13
|
store = Logster.store ||= Logster::RedisStore.new
|
14
14
|
store.level = Logger::Severity::WARN if Rails.env.production?
|
15
15
|
|
16
|
-
|
16
|
+
if Rails.env.development?
|
17
|
+
require 'logster/defer_logger'
|
18
|
+
logger = Logster::DeferLogger.new(store)
|
19
|
+
else
|
20
|
+
logger = Logster::Logger.new(store)
|
21
|
+
end
|
22
|
+
|
17
23
|
logger.chain(::Rails.logger)
|
18
24
|
logger.level = ::Rails.logger.level
|
19
25
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Logster
|
2
|
+
module Deferer
|
3
|
+
attr_reader :queue, :thread
|
4
|
+
def initialize
|
5
|
+
@queue = Queue.new
|
6
|
+
@mutex = Mutex.new
|
7
|
+
@thread = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def schedule(&blk)
|
11
|
+
start_thread if !@thread&.alive?
|
12
|
+
@queue << blk
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def start_thread
|
18
|
+
@mutex.synchronize do
|
19
|
+
if !@thread&.alive?
|
20
|
+
@thread = Thread.new { do_work }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def do_work
|
26
|
+
while true
|
27
|
+
blk = @queue.pop
|
28
|
+
# we need to be able to break the loop so that the new
|
29
|
+
# thread "finishes" and let us test this code.
|
30
|
+
break if blk == :terminate
|
31
|
+
blk.call
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Scheduler
|
37
|
+
extend Deferer
|
38
|
+
initialize
|
39
|
+
end
|
40
|
+
end
|
data/lib/logster/version.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'logster/defer_logger'
|
3
|
+
require 'logster/logger'
|
4
|
+
|
5
|
+
class TestDeferLogger < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@store = TestStore.new
|
8
|
+
@defer_logger = Logster::DeferLogger.new(@store)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_defer_logger_inherits_logger
|
12
|
+
assert(Logster::Logger === @defer_logger)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_work_is_done_async
|
16
|
+
queue = Logster::Scheduler.queue
|
17
|
+
assert_equal(0, queue.size)
|
18
|
+
|
19
|
+
@defer_logger.add(4, "hi this a test", "prog")
|
20
|
+
|
21
|
+
assert_equal(1, queue.size)
|
22
|
+
queue << :terminate
|
23
|
+
Logster::Scheduler.thread.join
|
24
|
+
assert_equal(1, @store.calls.size)
|
25
|
+
|
26
|
+
# we need to make sure the backtrace is passed from the main thread.
|
27
|
+
# Otherwise we'd only get a partial backtrace from
|
28
|
+
# the point the new thread was spawned
|
29
|
+
backtrace = @store.calls.first[3][:backtrace]
|
30
|
+
assert_instance_of(Array, backtrace)
|
31
|
+
|
32
|
+
assert_equal(0, queue.size)
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- UI for viewing logs in Rack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -237,6 +237,7 @@ files:
|
|
237
237
|
- lib/logster.rb
|
238
238
|
- lib/logster/base_store.rb
|
239
239
|
- lib/logster/configuration.rb
|
240
|
+
- lib/logster/defer_logger.rb
|
240
241
|
- lib/logster/ignore_pattern.rb
|
241
242
|
- lib/logster/logger.rb
|
242
243
|
- lib/logster/message.rb
|
@@ -245,6 +246,7 @@ files:
|
|
245
246
|
- lib/logster/middleware/viewer.rb
|
246
247
|
- lib/logster/rails/railtie.rb
|
247
248
|
- lib/logster/redis_store.rb
|
249
|
+
- lib/logster/scheduler.rb
|
248
250
|
- lib/logster/version.rb
|
249
251
|
- lib/logster/web.rb
|
250
252
|
- logster.gemspec
|
@@ -254,6 +256,7 @@ files:
|
|
254
256
|
- test/logster/middleware/test_reporter.rb
|
255
257
|
- test/logster/middleware/test_viewer.rb
|
256
258
|
- test/logster/test_base_store.rb
|
259
|
+
- test/logster/test_defer_logger.rb
|
257
260
|
- test/logster/test_ignore_pattern.rb
|
258
261
|
- test/logster/test_logger.rb
|
259
262
|
- test/logster/test_message.rb
|
@@ -291,6 +294,7 @@ test_files:
|
|
291
294
|
- test/logster/middleware/test_reporter.rb
|
292
295
|
- test/logster/middleware/test_viewer.rb
|
293
296
|
- test/logster/test_base_store.rb
|
297
|
+
- test/logster/test_defer_logger.rb
|
294
298
|
- test/logster/test_ignore_pattern.rb
|
295
299
|
- test/logster/test_logger.rb
|
296
300
|
- test/logster/test_message.rb
|