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 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