logstash-logger 0.16.0 → 0.17.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/.travis.yml +4 -2
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -0
- data/README.md +17 -1
- data/gemfiles/rails_3.2.gemfile +1 -0
- data/gemfiles/rails_4.0.gemfile +1 -0
- data/gemfiles/rails_4.1.gemfile +1 -0
- data/gemfiles/rails_4.2.gemfile +1 -0
- data/gemfiles/rails_5.0.gemfile +1 -0
- data/lib/logstash-logger/logger.rb +3 -0
- data/lib/logstash-logger/multi_logger.rb +36 -2
- data/lib/logstash-logger/silenced_logging.rb +83 -0
- data/lib/logstash-logger/version.rb +1 -1
- data/spec/multi_logger_spec.rb +28 -1
- data/spec/silenced_logging_spec.rb +31 -0
- data/spec/spec_helper.rb +3 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1de31545fcd13dd8e1d6a5c3bcd4d69b29e4579a
|
4
|
+
data.tar.gz: c45861aa001389601e4ef8f4352879d58d0758fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 308d6259229cc7aa957cdf5390ac3f7f244b61f6eb0c181498dce44eec7dad74326efb213561824e98349d120c5f39dbe4ef0a3a32919bea292b622a44643833
|
7
|
+
data.tar.gz: 8a746761ac4c20717bb73f21117569c038438433c6fab5200175e6d0e9b71a752e7f7cecf3e44148f7e1962e344948b97485ff6be53548bbc8bf6d3376bb1a8a
|
data/.travis.yml
CHANGED
@@ -29,7 +29,9 @@ matrix:
|
|
29
29
|
- rvm: 2.3.1
|
30
30
|
gemfile: gemfiles/rails_3.2.gemfile
|
31
31
|
allow_failures:
|
32
|
-
-rvm: rbx-3.9
|
32
|
+
- rvm: rbx-3.9
|
33
33
|
sudo: false
|
34
34
|
cache: bundler
|
35
|
-
|
35
|
+
addons:
|
36
|
+
code_climate:
|
37
|
+
repo_token: 4d712355fa2863c0f33f413eeede4e52cc221c4bc989a692d97574b1f6010b69
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.17.0
|
2
|
+
- Support for logger silencing. [#87](https://github.com/dwbutler/logstash-logger/pull/87)
|
3
|
+
- Fixes Rails 5 support. [#86](https://github.com/dwbutler/logstash-logger/issues/86)
|
4
|
+
- Fixes support for tagged logging in MultiLogger.
|
5
|
+
|
1
6
|
## 0.16.0
|
2
7
|
|
3
8
|
This release is focused on improving the reliability of LogStashLogger.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -286,6 +286,18 @@ change the error logger by setting `LogStashLogger.configuration.default_error_l
|
|
286
286
|
your own logger object in the `:error_logger` configuration key when
|
287
287
|
instantiating a LogStashLogger.
|
288
288
|
|
289
|
+
## Logger Silencing
|
290
|
+
|
291
|
+
LogStashLogger provides support for Rails-style logger silencing. The
|
292
|
+
implementation was extracted from Rails, but has no dependencies, so it can be
|
293
|
+
used outside of a Rails app. The interface is the same as in Rails:
|
294
|
+
|
295
|
+
```ruby
|
296
|
+
logger.silence(temporary_level) do
|
297
|
+
...
|
298
|
+
end
|
299
|
+
```
|
300
|
+
|
289
301
|
## Rails Integration
|
290
302
|
|
291
303
|
Verified to work with both Rails 3, 4, and 5.
|
@@ -583,7 +595,7 @@ of the logstash listener. There is no known fix at this time. See [#43](https://
|
|
583
595
|
for more information.
|
584
596
|
|
585
597
|
### Errno::EMSGSIZE - Message too long
|
586
|
-
A known drawback of using UDP is
|
598
|
+
A known drawback of using TCP or UDP is the 65535 byte limit on total message size. To workaround
|
587
599
|
this issue, you will have to truncate the message by setting the max message size:
|
588
600
|
|
589
601
|
```ruby
|
@@ -592,6 +604,10 @@ LogStashLogger.configure do |config|
|
|
592
604
|
end
|
593
605
|
```
|
594
606
|
|
607
|
+
This will truncate only the `message` field of the LogStash Event. So make sure
|
608
|
+
you set the max message size significantly less than 65535 bytes to make room
|
609
|
+
for other fields.
|
610
|
+
|
595
611
|
## Breaking changes
|
596
612
|
|
597
613
|
### Version 0.5+
|
data/gemfiles/rails_3.2.gemfile
CHANGED
data/gemfiles/rails_4.0.gemfile
CHANGED
data/gemfiles/rails_4.1.gemfile
CHANGED
data/gemfiles/rails_4.2.gemfile
CHANGED
data/gemfiles/rails_5.0.gemfile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'logstash-logger/tagged_logging'
|
3
|
+
require 'logstash-logger/silenced_logging'
|
3
4
|
|
4
5
|
module LogStashLogger
|
5
6
|
autoload :MultiLogger, 'logstash-logger/multi_logger'
|
@@ -68,6 +69,7 @@ module LogStashLogger
|
|
68
69
|
logger.instance_variable_set(:@device, device)
|
69
70
|
logger.extend(self)
|
70
71
|
logger.extend(TaggedLogging)
|
72
|
+
logger.extend(SilencedLogging)
|
71
73
|
end
|
72
74
|
end
|
73
75
|
|
@@ -87,5 +89,6 @@ module LogStashLogger
|
|
87
89
|
|
88
90
|
logger.extend(self)
|
89
91
|
logger.extend(TaggedLogging)
|
92
|
+
logger.extend(SilencedLogging)
|
90
93
|
end
|
91
94
|
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
# Adapted from https://github.com/ffmike/multilogger
|
2
2
|
module LogStashLogger
|
3
3
|
class MultiLogger < ::Logger
|
4
|
+
# Array of Loggers to be logged to. These can be anything that acts reasonably like a Logger.
|
5
|
+
attr_accessor :loggers
|
6
|
+
|
4
7
|
def level=(value)
|
5
8
|
super
|
6
9
|
@loggers.each do |logger|
|
@@ -28,8 +31,39 @@ module LogStashLogger
|
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
31
|
-
|
32
|
-
|
34
|
+
def silence(temporary_level = ::Logger::ERROR, &block)
|
35
|
+
silenceable_loggers = @loggers.select do |logger|
|
36
|
+
logger.respond_to?(:silence)
|
37
|
+
end
|
38
|
+
|
39
|
+
silence_loggers(temporary_level, silenceable_loggers, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def silence_loggers(temporary_level = ::Logger::ERROR, silenceable_loggers, &block)
|
43
|
+
return yield(self) if silenceable_loggers.empty?
|
44
|
+
|
45
|
+
silenceable_loggers.shift.silence(temporary_level) do
|
46
|
+
silence_loggers(temporary_level, silenceable_loggers, &block)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
private :silence_loggers
|
50
|
+
|
51
|
+
def tagged(*tags, &block)
|
52
|
+
taggable_loggers = @loggers.select do |logger|
|
53
|
+
logger.respond_to?(:tagged)
|
54
|
+
end
|
55
|
+
|
56
|
+
tag_loggers(tags, taggable_loggers, &block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def tag_loggers(tags, taggable_loggers, &block)
|
60
|
+
return yield(self) if taggable_loggers.empty?
|
61
|
+
|
62
|
+
taggable_loggers.shift.tagged(*tags) do
|
63
|
+
tag_loggers(tags, taggable_loggers, &block)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
private :tag_loggers
|
33
67
|
|
34
68
|
# Any method not defined on standard Logger class, just send it on to anyone who will listen
|
35
69
|
def method_missing(name, *args, &block)
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Adapted from:
|
2
|
+
# https://github.com/rails/activerecord-session_store/blob/master/lib/active_record/session_store/extension/logger_silencer.rb
|
3
|
+
# https://github.com/rails/rails/pull/16885
|
4
|
+
|
5
|
+
require 'thread'
|
6
|
+
|
7
|
+
# Add support for Rails-style logger silencing. Thread-safe and no dependencies.
|
8
|
+
#
|
9
|
+
# Setup:
|
10
|
+
# logger = Logger.new(STDOUT)
|
11
|
+
# logger.extend(LogStashLogger::SilencedLogging)
|
12
|
+
#
|
13
|
+
# Usage:
|
14
|
+
#
|
15
|
+
# logger.silence do
|
16
|
+
# ...
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
module LogStashLogger
|
20
|
+
module SilencedLogging
|
21
|
+
def self.extended(logger)
|
22
|
+
class << logger
|
23
|
+
attr_accessor :silencer
|
24
|
+
alias_method :level_without_threadsafety, :level
|
25
|
+
alias_method :level, :level_with_threadsafety
|
26
|
+
alias_method :add_without_threadsafety, :add
|
27
|
+
alias_method :add, :add_with_threadsafety
|
28
|
+
|
29
|
+
Logger::Severity.constants.each do |severity|
|
30
|
+
instance_eval <<-EOT, __FILE__, __LINE__ + 1
|
31
|
+
def #{severity.downcase}? # def debug?
|
32
|
+
Logger::#{severity} >= level # DEBUG >= level
|
33
|
+
end # end
|
34
|
+
EOT
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
logger.instance_eval do
|
39
|
+
self.silencer = true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def thread_level
|
44
|
+
Thread.current[thread_hash_level_key]
|
45
|
+
end
|
46
|
+
|
47
|
+
def thread_level=(level)
|
48
|
+
Thread.current[thread_hash_level_key] = level
|
49
|
+
end
|
50
|
+
|
51
|
+
def level_with_threadsafety
|
52
|
+
thread_level || level_without_threadsafety
|
53
|
+
end
|
54
|
+
|
55
|
+
def add_with_threadsafety(severity, message = nil, progname = nil, &block)
|
56
|
+
if (defined?(@logdev) && @logdev.nil?) || (severity || UNKNOWN) < level
|
57
|
+
true
|
58
|
+
else
|
59
|
+
add_without_threadsafety(severity, message, progname, &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Silences the logger for the duration of the block.
|
64
|
+
def silence(temporary_level = Logger::ERROR)
|
65
|
+
if silencer
|
66
|
+
begin
|
67
|
+
self.thread_level = temporary_level
|
68
|
+
yield self
|
69
|
+
ensure
|
70
|
+
self.thread_level = nil
|
71
|
+
end
|
72
|
+
else
|
73
|
+
yield self
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def thread_hash_level_key
|
80
|
+
@thread_hash_level_key ||= :"ThreadSafeLogger##{object_id}@level"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/spec/multi_logger_spec.rb
CHANGED
@@ -27,6 +27,33 @@ describe LogStashLogger::MultiLogger do
|
|
27
27
|
expect(logger).to receive(:info).with("test")
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
subject.info("test")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "supports silenced logging" do
|
34
|
+
subject.loggers.each do |logger|
|
35
|
+
expect(logger).to receive(:silence).and_call_original
|
36
|
+
expect(logger.device).to receive(:write).once
|
37
|
+
end
|
38
|
+
|
39
|
+
subject.silence(::Logger::WARN) do |logger|
|
40
|
+
expect(logger).to eq(subject)
|
41
|
+
logger.info 'info'
|
42
|
+
logger.warn 'warning'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "supports tagged logging" do
|
47
|
+
subject.loggers.each do |logger|
|
48
|
+
expect(logger).to receive(:tagged).with('tag').and_call_original
|
49
|
+
expect(logger.device).to receive(:write) do |event_string|
|
50
|
+
event = JSON.parse(event_string)
|
51
|
+
expect(event['tags']).to match_array(['tag'])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
subject.tagged('tag') do |logger|
|
56
|
+
logger.info 'test'
|
57
|
+
end
|
31
58
|
end
|
32
59
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'logstash-logger'
|
2
|
+
|
3
|
+
describe LogStashLogger do
|
4
|
+
include_context 'logger'
|
5
|
+
|
6
|
+
describe "silenced logging" do
|
7
|
+
|
8
|
+
it "yields the logger" do
|
9
|
+
logger.silence do |yielded|
|
10
|
+
expect(yielded).to eq(logger)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "silences any message below ERROR level by default" do
|
15
|
+
logger.silence do
|
16
|
+
expect(logger.device).to receive(:write).once
|
17
|
+
logger.info("info")
|
18
|
+
logger.warn("warning")
|
19
|
+
logger.error("error")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "takes a custom log level to silence to" do
|
24
|
+
logger.silence(::Logger::WARN) do
|
25
|
+
expect(logger.device).to receive(:write).once
|
26
|
+
logger.info("info")
|
27
|
+
logger.warn("warning")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Butler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-event
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- lib/logstash-logger/logger.rb
|
199
199
|
- lib/logstash-logger/multi_logger.rb
|
200
200
|
- lib/logstash-logger/railtie.rb
|
201
|
+
- lib/logstash-logger/silenced_logging.rb
|
201
202
|
- lib/logstash-logger/tagged_logging.rb
|
202
203
|
- lib/logstash-logger/version.rb
|
203
204
|
- logstash-logger.gemspec
|
@@ -235,6 +236,7 @@ files:
|
|
235
236
|
- spec/logger_spec.rb
|
236
237
|
- spec/multi_logger_spec.rb
|
237
238
|
- spec/rails_spec.rb
|
239
|
+
- spec/silenced_logging_spec.rb
|
238
240
|
- spec/spec_helper.rb
|
239
241
|
- spec/syslog_spec.rb
|
240
242
|
- spec/tagged_logging_spec.rb
|
@@ -288,6 +290,7 @@ test_files:
|
|
288
290
|
- spec/logger_spec.rb
|
289
291
|
- spec/multi_logger_spec.rb
|
290
292
|
- spec/rails_spec.rb
|
293
|
+
- spec/silenced_logging_spec.rb
|
291
294
|
- spec/spec_helper.rb
|
292
295
|
- spec/syslog_spec.rb
|
293
296
|
- spec/tagged_logging_spec.rb
|