logster 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6bb693026c9bc6da3cae18d09fd0c1fcc13194530d6f43623ae7f424bb9da33
4
- data.tar.gz: 6b453201f1188f132ee731e80a6f4a529a9fcb4a675b8f113d91c0ce445ccc83
3
+ metadata.gz: 484138ca4f1b5b9212316516f8aca1ea2c062f658da58d0f39556780407f9515
4
+ data.tar.gz: f341af6a072b39c1ce7d2b1ed33c0971cc2797509db10a88205566f60c30df96
5
5
  SHA512:
6
- metadata.gz: 146b861272b627ff3f43237529e5efd9e9a4d22a7fc94306bd7147e871f3f79ca74fdf1787aeb76d209ab8de97b611a8fed7f1a5d780b64c8ceb1d3bb88333e0
7
- data.tar.gz: 05ea4da3f3a9165eb8eca96c3449ef3169e410669970b6a3c11cc5132f5d0c2d8747f2a183d2c4cb734835da5651049a118b45d0c874be462379d9eeb8c7d4ee
6
+ metadata.gz: f0037037f85b24ffb9b668555b262114b17d1b8eb9c40132030db9e641401384de993d7c6b31fad715c62d6c5b655f746f9504de2400b16e37c15733e4cb65c8
7
+ data.tar.gz: 86671e65478cc95e12dd6babb49bfd37cf0a919d8a4e7b7f73c981ead3e3b93b4fb37756330359ad914983f2ee526c36ad2e158897ad13f64b910a40f590e55f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # CHANGELOG
2
2
 
3
+ - 2019-02-13: Version 2.1.0
4
+ - FEATURE/DEV: adds a defer logger that will do logging asynchronously only in dev environments. It should speed things up a little in dev.
5
+
3
6
  - 2019-02-05: Version 2.0.1
4
7
  - FIX: env line height issue on iOS
5
8
 
@@ -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
@@ -98,11 +98,16 @@ module Logster
98
98
  opts ||= {}
99
99
  opts[:env] ||= Thread.current[LOGSTER_ENV]
100
100
 
101
- @store.report(severity, progname, message, opts)
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
- logger = Logster::Logger.new(store)
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
@@ -1,3 +1,3 @@
1
1
  module Logster
2
- VERSION = "2.0.1"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -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.1
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-05 00:00:00.000000000 Z
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