multiple_devices_logger 2.0.3 → 3.0.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
  SHA1:
3
- metadata.gz: 8c8875aa3e930caeabc8f1da4e1b29e0c0048fcc
4
- data.tar.gz: 94dc37b500f66c4ee3cf466085baf6b8a4062cf2
3
+ metadata.gz: 6708c589f3a3ac88b3b7895fb81e80aaa8599edd
4
+ data.tar.gz: 0b9f4e45464595ab9b198891e117f0acb8627eeb
5
5
  SHA512:
6
- metadata.gz: 06dd0de6cfffb45e360626b98b974e4aff73980b72e64efe9048dc7b0e195c6d82d4abcc2e79b822e39e1efcd0d021496a1011dc8540eb45343a0f001d160044
7
- data.tar.gz: 9c5d2050463dad9d124114c479b4b39a4c4444628bc337c3018272558c772983ea3de512c283d19f5cd17122720d4ca861d3c747ee0509557f0c73572c1ab19f
6
+ metadata.gz: 2f4c34cf95f793e7c9b50f074768c6ce6de61585c66031c4dc95b318557342894dddf935969b7a1496a1758b62cb20d653ed8be304d4b97b3889dbad7d913914
7
+ data.tar.gz: '06678bb8a215a876a1df0da0f7587f6449c86142edc20e5bb84946604f302797023a76f26e0acfd943faaf92b5e8f4afc53ba80ee213a33fa313bd62989b673a'
data/README.mdown CHANGED
@@ -79,6 +79,21 @@ logger.add_device(STDERR, :debug, formatter: -> (severity, time, progname, messa
79
79
 
80
80
  Otherwise default formatter is used.
81
81
 
82
+ ### Ignore exceptions from logging
83
+
84
+ You can ignore some exceptions to be logged globally:
85
+
86
+ ```ruby
87
+ logger.ignore_exceptions(IOError, ArgumentError)
88
+ ```
89
+
90
+ Or just for some devices with `:ignore_exceptions` otpion when you register
91
+ the device:
92
+
93
+ ```ruby
94
+ logger.add_device(STDERR, :debug, ignore_exceptions: [IOError, ArgumentError])
95
+ ```
96
+
82
97
  ## Executing test suite
83
98
 
84
99
  This project is fully tested with [Rspec 3](http://github.com/rspec/rspec).
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.3
1
+ 3.0.0
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/module'
2
+ require 'active_support/core_ext/string'
1
3
  require 'logger'
2
4
 
3
5
  class MultipleDevicesLogger < Logger
@@ -30,7 +32,9 @@ class MultipleDevicesLogger < Logger
30
32
  progname = self.progname
31
33
  end
32
34
  end
35
+ return false if exception_ignored?(message)
33
36
  devices_for(severity).each do |device|
37
+ next if device.exception_ignored?(message)
34
38
  formatter = device.formatter || self.formatter || @default_formatter
35
39
  device.write(formatter.call(format_severity(severity), Time.now, progname, message))
36
40
  end
@@ -46,8 +50,10 @@ class MultipleDevicesLogger < Logger
46
50
  formatter = options.delete(:formatter)
47
51
  raise ArgumentError.new("Formatter must respond to #call, #{formatter.inspect} given") unless formatter.respond_to?(:call)
48
52
  end
53
+ ignored_exceptions = options.delete(:ignore_exceptions)
49
54
  device = LogDevice.new(device, options) unless device.is_a?(Logger::LogDevice)
50
55
  device.formatter = formatter
56
+ device.ignore_exceptions(ignored_exceptions) if ignored_exceptions.present?
51
57
  if severities.empty?
52
58
  keys = SEVERITIES.values
53
59
  else
@@ -109,3 +115,8 @@ class Logger::LogDevice
109
115
  attr_accessor :formatter
110
116
 
111
117
  end
118
+
119
+ require 'multiple_devices_logger/ignore_exceptions'
120
+
121
+ MultipleDevicesLogger.send(:include, MultipleDevicesLogger::IgnoreExceptions)
122
+ Logger::LogDevice.send(:include, MultipleDevicesLogger::IgnoreExceptions)
@@ -0,0 +1,30 @@
1
+ class MultipleDevicesLogger
2
+
3
+ module IgnoreExceptions
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ def exception_ignored?(exception)
8
+ exception.is_a?(Exception) && ignored_exception_classes.any? do |klass|
9
+ exception.is_a?(klass)
10
+ end
11
+ end
12
+
13
+ def ignore_exceptions(*classes)
14
+ @ignored_exception_class_names ||= []
15
+ [classes].flatten.each do |class_name|
16
+ klass = class_name.is_a?(Class) ? class_name : class_name.to_s.presence.try(:constantize)
17
+ raise("Invalid exception class: #{class_name.inspect}") unless klass.is_a?(Class) && (klass == Exception || (klass < Exception))
18
+ @ignored_exception_class_names << klass.name
19
+ end
20
+ @ignored_exception_class_names.uniq!
21
+ nil
22
+ end
23
+
24
+ def ignored_exception_classes
25
+ (@ignored_exception_class_names || []).map(&:constantize)
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -15,6 +15,8 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.required_ruby_version = '>= 2.0.0'
17
17
 
18
+ s.add_dependency 'activesupport', '>= 5.0.0', '< 5.2.0'
19
+
18
20
  s.add_development_dependency 'byebug', '>= 9.0.0', '< 10.0.0'
19
21
  s.add_development_dependency 'rake', '>= 12.0.0', '< 13.0.0'
20
22
  s.add_development_dependency 'rspec', '>= 3.5.0', '< 3.6.0'
metadata CHANGED
@@ -1,15 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multiple_devices_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Toulotte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-18 00:00:00.000000000 Z
11
+ date: 2017-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 5.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 5.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 5.2.0
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: byebug
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +100,7 @@ files:
80
100
  - README.mdown
81
101
  - VERSION
82
102
  - lib/multiple_devices_logger.rb
103
+ - lib/multiple_devices_logger/ignore_exceptions.rb
83
104
  - multiple_devices_logger.gemspec
84
105
  homepage: https://github.com/alexistoulotte/multiple_devices_logger
85
106
  licenses: