yell 1.4.0 → 2.2.2
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/.gitignore +6 -2
- data/.ruby-version +1 -0
- data/.travis.yml +16 -13
- data/Gemfile +15 -8
- data/LICENSE.txt +1 -1
- data/README.md +10 -3
- data/Rakefile +1 -3
- data/examples/002.1-log-level-basics.rb +2 -2
- data/examples/002.2-log-level-on-certain-severities-only.rb +5 -4
- data/examples/002.3-log-level-within-range.rb +7 -5
- data/examples/003.1-formatting-DefaultFormat.rb +3 -3
- data/examples/003.2-formatting-BasicFormat.rb +3 -3
- data/examples/003.3-formatting-ExtendedFormat.rb +3 -3
- data/examples/003.4-formatting-on-your-own.rb +3 -3
- data/examples/004.1-colorizing-the-log-output.rb +3 -3
- data/examples/005.1-repository.rb +3 -3
- data/examples/006.1-the-loggable-module.rb +2 -2
- data/examples/006.2-the-loggable-module-with-inheritance.rb +2 -2
- data/lib/core_ext/logger.rb +17 -0
- data/lib/yell/adapters/base.rb +17 -22
- data/lib/yell/adapters/datefile.rb +23 -22
- data/lib/yell/adapters/file.rb +3 -7
- data/lib/yell/adapters/io.rb +9 -15
- data/lib/yell/adapters/streams.rb +0 -5
- data/lib/yell/adapters.rb +41 -10
- data/lib/yell/configuration.rb +2 -4
- data/lib/yell/event.rb +46 -10
- data/lib/yell/formatter.rb +134 -54
- data/lib/yell/helpers/{adapters.rb → adapter.rb} +7 -17
- data/lib/yell/helpers/base.rb +0 -1
- data/lib/yell/helpers/formatter.rb +8 -8
- data/lib/yell/helpers/level.rb +7 -4
- data/lib/yell/helpers/silencer.rb +3 -5
- data/lib/yell/helpers/tracer.rb +6 -7
- data/lib/yell/level.rb +19 -16
- data/lib/yell/loggable.rb +11 -7
- data/lib/yell/logger.rb +47 -68
- data/lib/yell/repository.rb +3 -5
- data/lib/yell/silencer.rb +30 -14
- data/lib/yell/version.rb +1 -4
- data/lib/yell.rb +29 -11
- data/yell.gemspec +22 -15
- metadata +19 -50
- data/spec/fixtures/yell.yml +0 -7
- data/spec/spec_helper.rb +0 -50
- data/spec/threaded/yell_spec.rb +0 -100
- data/spec/yell/adapters/base_spec.rb +0 -43
- data/spec/yell/adapters/datefile_spec.rb +0 -168
- data/spec/yell/adapters/file_spec.rb +0 -75
- data/spec/yell/adapters/io_spec.rb +0 -72
- data/spec/yell/adapters/streams_spec.rb +0 -26
- data/spec/yell/adapters_spec.rb +0 -45
- data/spec/yell/configuration_spec.rb +0 -36
- data/spec/yell/event_spec.rb +0 -97
- data/spec/yell/formatter_spec.rb +0 -136
- data/spec/yell/level_spec.rb +0 -200
- data/spec/yell/loggable_spec.rb +0 -20
- data/spec/yell/logger_spec.rb +0 -263
- data/spec/yell/repository_spec.rb +0 -70
- data/spec/yell/silencer_spec.rb +0 -49
- data/spec/yell_spec.rb +0 -102
data/lib/yell/helpers/level.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Yell #:nodoc:
|
3
2
|
module Helpers #:nodoc:
|
4
3
|
module Level
|
@@ -10,18 +9,22 @@ module Yell #:nodoc:
|
|
10
9
|
#
|
11
10
|
# @param [String, Symbol, Integer] severity The minimum log level
|
12
11
|
def level=( severity )
|
13
|
-
@
|
12
|
+
@__level__ = case severity
|
13
|
+
when Yell::Level then severity
|
14
|
+
else Yell::Level.new(severity)
|
15
|
+
end
|
14
16
|
end
|
15
17
|
|
16
18
|
# @private
|
17
19
|
def level
|
18
|
-
@
|
20
|
+
@__level__
|
19
21
|
end
|
20
22
|
|
23
|
+
|
21
24
|
private
|
22
25
|
|
23
26
|
def reset!
|
24
|
-
@
|
27
|
+
@__level__ = Yell::Level.new
|
25
28
|
|
26
29
|
super
|
27
30
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Yell #:nodoc:
|
3
2
|
module Helpers #:nodoc:
|
4
3
|
module Silencer
|
@@ -8,22 +7,21 @@ module Yell #:nodoc:
|
|
8
7
|
silencer.add(*patterns)
|
9
8
|
end
|
10
9
|
|
11
|
-
# @private
|
12
10
|
def silencer
|
13
|
-
@
|
11
|
+
@__silencer__
|
14
12
|
end
|
15
13
|
|
16
14
|
|
17
15
|
private
|
18
16
|
|
19
17
|
def reset!
|
20
|
-
@
|
18
|
+
@__silencer__ = Yell::Silencer.new
|
21
19
|
|
22
20
|
super
|
23
21
|
end
|
24
22
|
|
25
23
|
def silence!( *messages )
|
26
|
-
|
24
|
+
@__silencer__.silence!(*messages) if silencer.silence?
|
27
25
|
end
|
28
26
|
|
29
27
|
end
|
data/lib/yell/helpers/tracer.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Yell #:nodoc:
|
3
2
|
module Helpers #:nodoc:
|
4
3
|
module Tracer #:nodoc:
|
@@ -18,22 +17,22 @@ module Yell #:nodoc:
|
|
18
17
|
#
|
19
18
|
# @return [Yell::Level] a level representation of the tracer
|
20
19
|
def trace=( severity )
|
21
|
-
case severity
|
22
|
-
when
|
23
|
-
|
20
|
+
@__trace__ = case severity
|
21
|
+
when Yell::Level then severity
|
22
|
+
when false then Yell::Level.new("gt.#{Yell::Severities.last}")
|
23
|
+
else Yell::Level.new(severity)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
# @private
|
28
27
|
def trace
|
29
|
-
@
|
28
|
+
@__trace__
|
30
29
|
end
|
31
30
|
|
32
31
|
|
33
32
|
private
|
34
33
|
|
35
34
|
def reset!
|
36
|
-
@
|
35
|
+
@__trace__ = Yell::Level.new('gte.error')
|
37
36
|
|
38
37
|
super
|
39
38
|
end
|
data/lib/yell/level.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Yell #:nodoc:
|
4
2
|
|
5
3
|
# The +Level+ class handles the severities for you in order to determine
|
@@ -23,6 +21,7 @@ module Yell #:nodoc:
|
|
23
21
|
# @example Set at :info only
|
24
22
|
# Yell::Level.new.at(:info)
|
25
23
|
class Level
|
24
|
+
include Comparable
|
26
25
|
|
27
26
|
InterpretRegexp = /(at|gt|gte|lt|lte)?\.?(#{Yell::Severities.join('|')})/i
|
28
27
|
|
@@ -42,7 +41,8 @@ module Yell #:nodoc:
|
|
42
41
|
#
|
43
42
|
# @param [Integer,String,Symbol,Array,Range,nil] severity The severity for the level.
|
44
43
|
def initialize( *severities )
|
45
|
-
|
44
|
+
@tainted = false
|
45
|
+
set(*severities)
|
46
46
|
end
|
47
47
|
|
48
48
|
# Set the severity to the given format
|
@@ -51,10 +51,10 @@ module Yell #:nodoc:
|
|
51
51
|
severity = severities.length > 1 ? severities : severities.first
|
52
52
|
|
53
53
|
case severity
|
54
|
-
when Array then at(
|
55
|
-
when Range then gte(
|
56
|
-
when
|
57
|
-
when
|
54
|
+
when Array then at(*severity)
|
55
|
+
when Range then gte(severity.first).lte(severity.last)
|
56
|
+
when String then interpret(severity)
|
57
|
+
when Integer, Symbol then gte(severity)
|
58
58
|
when Yell::Level then @severities = severity.severities
|
59
59
|
end
|
60
60
|
end
|
@@ -67,7 +67,7 @@ module Yell #:nodoc:
|
|
67
67
|
#
|
68
68
|
# @return [Boolean] tru or false
|
69
69
|
def at?( severity )
|
70
|
-
index = index_from(
|
70
|
+
index = index_from(severity)
|
71
71
|
|
72
72
|
index.nil? ? false : @severities[index]
|
73
73
|
end
|
@@ -146,8 +146,12 @@ module Yell #:nodoc:
|
|
146
146
|
|
147
147
|
# @private
|
148
148
|
def ==(other)
|
149
|
-
|
150
|
-
|
149
|
+
other.respond_to?(:severities) ? severities == other.severities : super
|
150
|
+
end
|
151
|
+
|
152
|
+
# @private
|
153
|
+
def <=>( other )
|
154
|
+
other.is_a?(Numeric) ? to_i <=> other : super
|
151
155
|
end
|
152
156
|
|
153
157
|
|
@@ -162,7 +166,7 @@ module Yell #:nodoc:
|
|
162
166
|
end
|
163
167
|
|
164
168
|
def calculate!( modifier, severity )
|
165
|
-
index = index_from(
|
169
|
+
index = index_from(severity)
|
166
170
|
return if index.nil?
|
167
171
|
|
168
172
|
case modifier
|
@@ -173,14 +177,13 @@ module Yell #:nodoc:
|
|
173
177
|
else set!( index ) # :==
|
174
178
|
end
|
175
179
|
|
176
|
-
|
180
|
+
@tainted = true unless @tainted
|
177
181
|
end
|
178
182
|
|
179
183
|
def index_from( severity )
|
180
184
|
case severity
|
181
|
-
when
|
182
|
-
|
183
|
-
else nil
|
185
|
+
when String, Symbol then Yell::Severities.index(severity.to_s.upcase)
|
186
|
+
else Integer(severity)
|
184
187
|
end
|
185
188
|
end
|
186
189
|
|
@@ -201,7 +204,7 @@ module Yell #:nodoc:
|
|
201
204
|
end
|
202
205
|
|
203
206
|
def set!( index, val = true )
|
204
|
-
@severities.map! { false } unless tainted
|
207
|
+
@severities.map! { false } unless @tainted
|
205
208
|
|
206
209
|
@severities[index] = val
|
207
210
|
end
|
data/lib/yell/loggable.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Yell #:nodoc:
|
4
|
-
|
5
2
|
# Include this module to add a logger to any class.
|
6
3
|
#
|
7
4
|
# When including this module, your class will have a :logger instance method
|
@@ -9,7 +6,7 @@ module Yell #:nodoc:
|
|
9
6
|
# provide it with the name of your class.
|
10
7
|
#
|
11
8
|
# @example
|
12
|
-
# Yell.new :stdout, :
|
9
|
+
# Yell.new :stdout, name: 'Foo'
|
13
10
|
#
|
14
11
|
# class Foo
|
15
12
|
# include Yell::Loggable
|
@@ -17,11 +14,18 @@ module Yell #:nodoc:
|
|
17
14
|
#
|
18
15
|
# Foo.new.logger.info "Hello World"
|
19
16
|
module Loggable
|
17
|
+
def self.included(base)
|
18
|
+
base.extend(ClassMethods)
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
module ClassMethods
|
22
|
+
def logger
|
23
|
+
Yell[self]
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
27
|
+
def logger
|
28
|
+
self.class.logger
|
29
|
+
end
|
25
30
|
end
|
26
31
|
end
|
27
|
-
|
data/lib/yell/logger.rb
CHANGED
@@ -1,44 +1,15 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'pathname'
|
4
2
|
|
5
|
-
# TODO: DSL improvements
|
6
|
-
#
|
7
|
-
# Initlalize an empty logger
|
8
|
-
# logger = Yell.new(adapters: false)
|
9
|
-
# logger.adapters.add :stdout
|
10
|
-
#
|
11
|
-
# Or shorthand for adapters.add
|
12
|
-
# logger.add :stdout
|
13
|
-
#
|
14
|
-
# Or with a block
|
15
|
-
# logger = Yell.new do |l|
|
16
|
-
# l.add :stdout
|
17
|
-
# l.add :stderr
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# logger = Yell.new do |l|
|
21
|
-
# l.adapters.add :stdout
|
22
|
-
# l.adapters.add :stderr
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# Define Silencers
|
27
|
-
# logger = Yell.new do |l|
|
28
|
-
# l.silence /password/
|
29
|
-
# end
|
30
|
-
#
|
31
3
|
module Yell #:nodoc:
|
32
|
-
|
33
4
|
# The +Yell::Logger+ is your entrypoint. Anything onwards is derived from here.
|
34
5
|
#
|
35
|
-
# A +Yell::Logger+ instance holds all your adapters and sends the log events
|
6
|
+
# A +Yell::Logger+ instance holds all your adapters and sends the log events
|
36
7
|
# to them if applicable. There are multiple ways of how to create a new logger.
|
37
8
|
class Logger
|
38
9
|
include Yell::Helpers::Base
|
39
10
|
include Yell::Helpers::Level
|
40
11
|
include Yell::Helpers::Formatter
|
41
|
-
include Yell::Helpers::
|
12
|
+
include Yell::Helpers::Adapter
|
42
13
|
include Yell::Helpers::Tracer
|
43
14
|
include Yell::Helpers::Silencer
|
44
15
|
|
@@ -55,38 +26,40 @@ module Yell #:nodoc:
|
|
55
26
|
# Yell::Logger.new :datefile, 'development.log'
|
56
27
|
#
|
57
28
|
# @example Setting the log level
|
58
|
-
# Yell::Logger.new :
|
29
|
+
# Yell::Logger.new level: :warn
|
59
30
|
#
|
60
31
|
# Yell::Logger.new do |l|
|
61
32
|
# l.level = :warn
|
62
33
|
# end
|
63
34
|
#
|
64
35
|
# @example Combined settings
|
65
|
-
# Yell::Logger.new 'development.log', :
|
36
|
+
# Yell::Logger.new 'development.log', level: :warn
|
66
37
|
#
|
67
38
|
# Yell::Logger.new :datefile, 'development.log' do |l|
|
68
39
|
# l.level = :info
|
69
40
|
# end
|
70
41
|
def initialize( *args, &block )
|
71
|
-
reset!
|
72
|
-
|
73
42
|
# extract options
|
74
43
|
@options = args.last.is_a?(Hash) ? args.pop : {}
|
75
44
|
|
76
|
-
# adapters may be passed in the options
|
77
|
-
extract!(@options)
|
78
|
-
|
79
45
|
# check if filename was given as argument and put it into the @options
|
80
46
|
if [String, Pathname].include?(args.last.class)
|
81
47
|
@options[:filename] = args.pop unless @options[:filename]
|
82
48
|
end
|
83
49
|
|
84
|
-
|
85
|
-
|
86
|
-
|
50
|
+
reset!
|
51
|
+
|
52
|
+
# FIXME: :format is deprecated in future versions --R
|
53
|
+
self.formatter = Yell.__fetch__(@options, :format, :formatter)
|
54
|
+
self.level = Yell.__fetch__(@options, :level, :default => 0)
|
55
|
+
self.name = Yell.__fetch__(@options, :name)
|
56
|
+
self.trace = Yell.__fetch__(@options, :trace, default: :error)
|
87
57
|
|
88
58
|
# silencer
|
89
|
-
self.silence(
|
59
|
+
self.silence(*Yell.__fetch__(@options, :silence, default: []))
|
60
|
+
|
61
|
+
# adapters may be passed in the options
|
62
|
+
extract!(*Yell.__fetch__(@options, :adapters, default: []))
|
90
63
|
|
91
64
|
# extract adapter
|
92
65
|
self.adapter(args.pop) if args.any?
|
@@ -104,12 +77,25 @@ module Yell #:nodoc:
|
|
104
77
|
#
|
105
78
|
# @return [String] The logger's name
|
106
79
|
def name=( val )
|
107
|
-
|
108
|
-
|
80
|
+
Yell::Repository[val] = self if val
|
81
|
+
@name = val.nil? ? "<#{self.class.name}##{object_id}>": val
|
109
82
|
|
110
83
|
@name
|
111
84
|
end
|
112
85
|
|
86
|
+
# Somewhat backwards compatible method (not fully though)
|
87
|
+
def add( options, *messages, &block )
|
88
|
+
return false unless level.at?(options)
|
89
|
+
|
90
|
+
messages = messages
|
91
|
+
messages << block.call unless block.nil?
|
92
|
+
messages = silencer.call(*messages)
|
93
|
+
return false if messages.empty?
|
94
|
+
|
95
|
+
event = Yell::Event.new(self, options, *messages)
|
96
|
+
write(event)
|
97
|
+
end
|
98
|
+
|
113
99
|
# Creates instance methods for every log level:
|
114
100
|
# `debug` and `debug?`
|
115
101
|
# `info` and `info?`
|
@@ -119,18 +105,12 @@ module Yell #:nodoc:
|
|
119
105
|
Yell::Severities.each_with_index do |s, index|
|
120
106
|
name = s.downcase
|
121
107
|
|
122
|
-
class_eval <<-EOS, __FILE__, __LINE__
|
108
|
+
class_eval <<-EOS, __FILE__, __LINE__ + index
|
123
109
|
def #{name}?; level.at?(#{index}); end # def info?; level.at?(1); end
|
124
110
|
#
|
125
111
|
def #{name}( *m, &b ) # def info( *m, &b )
|
126
|
-
|
127
|
-
|
128
|
-
m = silencer.silence(*m) if silencer.silence? # m = silencer.silence(*m) if silencer.silence?
|
129
|
-
return false if m.empty? # return false if m.empty?
|
130
|
-
#
|
131
|
-
event = Yell::Event.new(self, #{index}, *m, &b) # event = Yell::Event.new(self, 1, *m, &b)
|
132
|
-
write(event) # write(event)
|
133
|
-
true # true
|
112
|
+
options = Yell::Event::Options.new(#{index}, 1)
|
113
|
+
add(options, *m, &b) # add(Yell::Event::Options.new(1, 1), *m, &b)
|
134
114
|
end # end
|
135
115
|
EOS
|
136
116
|
end
|
@@ -138,14 +118,18 @@ module Yell #:nodoc:
|
|
138
118
|
# Get a pretty string representation of the logger.
|
139
119
|
def inspect
|
140
120
|
inspection = inspectables.map { |m| "#{m}: #{send(m).inspect}" }
|
141
|
-
"#<#{self.class.name} #{inspection * ', '}
|
121
|
+
"#<#{self.class.name} #{inspection * ', '}>"
|
142
122
|
end
|
143
123
|
|
144
124
|
# @private
|
145
125
|
def close
|
146
|
-
|
126
|
+
adapters.close
|
147
127
|
end
|
148
128
|
|
129
|
+
# @private
|
130
|
+
def write( event )
|
131
|
+
adapters.write(event)
|
132
|
+
end
|
149
133
|
|
150
134
|
private
|
151
135
|
|
@@ -153,29 +137,24 @@ module Yell #:nodoc:
|
|
153
137
|
# multiple variations:
|
154
138
|
#
|
155
139
|
# @example
|
156
|
-
#
|
140
|
+
# extract!(:stdout, :stderr)
|
157
141
|
#
|
158
142
|
# @example
|
159
|
-
#
|
160
|
-
def extract!(
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
else
|
143
|
+
# extract!(stdout: {level: :info}, stderr: {level: :error})
|
144
|
+
def extract!( *list )
|
145
|
+
list.each do |a|
|
146
|
+
if a.is_a?(Hash)
|
147
|
+
a.each { |t, o| adapter(t, o) }
|
148
|
+
else
|
149
|
+
adapter(a)
|
165
150
|
end
|
166
151
|
end
|
167
152
|
end
|
168
153
|
|
169
|
-
# Cycles all the adapters and writes the message
|
170
|
-
def write( event )
|
171
|
-
adapters.each { |a| a.write(event) }
|
172
|
-
end
|
173
|
-
|
174
154
|
# Get an array of inspected attributes for the adapter.
|
175
155
|
def inspectables
|
176
156
|
[:name] | super
|
177
157
|
end
|
178
|
-
|
179
158
|
end
|
180
159
|
end
|
181
160
|
|
data/lib/yell/repository.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'monitor'
|
4
2
|
require "singleton"
|
5
3
|
|
@@ -35,7 +33,7 @@ module Yell #:nodoc:
|
|
35
33
|
# @raise [Yell::LoggerNotFound] Raised when repository does not have that key
|
36
34
|
# @return [Yell::Logger] The logger instance
|
37
35
|
def self.[]( name )
|
38
|
-
synchronize { instance.
|
36
|
+
synchronize { instance.__fetch__(name) or raise Yell::LoggerNotFound.new(name) }
|
39
37
|
end
|
40
38
|
|
41
39
|
# Get the list of all loggers in the repository
|
@@ -57,11 +55,11 @@ module Yell #:nodoc:
|
|
57
55
|
# If the logger could not be found and has a superclass, it
|
58
56
|
# will attempt to look there. This is important for the
|
59
57
|
# Yell::Loggable module.
|
60
|
-
def
|
58
|
+
def __fetch__( name )
|
61
59
|
logger = loggers[name] || loggers[name.to_s]
|
62
60
|
|
63
61
|
if logger.nil? && name.respond_to?(:superclass)
|
64
|
-
return
|
62
|
+
return __fetch__(name.superclass)
|
65
63
|
end
|
66
64
|
|
67
65
|
logger
|
data/lib/yell/silencer.rb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Yell #:nodoc:
|
3
2
|
|
4
3
|
# The +Yell::Silencer+ is your handly helper for stiping out unwanted log messages.
|
5
4
|
class Silencer
|
6
5
|
|
6
|
+
class PresetNotFound < StandardError
|
7
|
+
def message; "Could not find a preset for #{super.inspect}"; end
|
8
|
+
end
|
9
|
+
|
10
|
+
Presets = {
|
11
|
+
:assets => [/\AStarted GET "\/assets/, /\AServed asset/, /\A\s*\z/] # for Rails
|
12
|
+
}
|
13
|
+
|
14
|
+
|
7
15
|
def initialize( *patterns )
|
8
16
|
@patterns = patterns.dup
|
9
17
|
end
|
@@ -17,27 +25,24 @@ module Yell #:nodoc:
|
|
17
25
|
# @example Add regular expressions
|
18
26
|
# add( /password/ )
|
19
27
|
#
|
20
|
-
# @return [
|
28
|
+
# @return [self] The silencer instance
|
21
29
|
def add( *patterns )
|
22
|
-
|
30
|
+
patterns.each { |pattern| add!(pattern) }
|
31
|
+
|
32
|
+
self
|
23
33
|
end
|
24
34
|
|
25
35
|
# Clears out all the messages that would match any defined pattern
|
26
36
|
#
|
27
37
|
# @example
|
28
|
-
#
|
38
|
+
# call(['username', 'password'])
|
29
39
|
# #=> ['username]
|
30
40
|
#
|
31
|
-
# @return [Array
|
32
|
-
def
|
33
|
-
messages
|
34
|
-
end
|
41
|
+
# @return [Array] The remaining messages
|
42
|
+
def call( *messages )
|
43
|
+
return messages if @patterns.empty?
|
35
44
|
|
36
|
-
|
37
|
-
#
|
38
|
-
# @return [Boolean] true or false
|
39
|
-
def silence?
|
40
|
-
@patterns.any?
|
45
|
+
messages.reject { |m| matches?(m) }
|
41
46
|
end
|
42
47
|
|
43
48
|
# Get a pretty string
|
@@ -53,6 +58,17 @@ module Yell #:nodoc:
|
|
53
58
|
|
54
59
|
private
|
55
60
|
|
61
|
+
def add!( pattern )
|
62
|
+
@patterns = @patterns | fetch(pattern)
|
63
|
+
end
|
64
|
+
|
65
|
+
def fetch( pattern )
|
66
|
+
case pattern
|
67
|
+
when Symbol then Presets[pattern] or raise PresetNotFound.new(pattern)
|
68
|
+
else [pattern]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
56
72
|
# Check if the provided message matches any of the defined patterns.
|
57
73
|
#
|
58
74
|
# @example
|
@@ -61,7 +77,7 @@ module Yell #:nodoc:
|
|
61
77
|
#
|
62
78
|
# @return [Boolean] true or false
|
63
79
|
def matches?( message )
|
64
|
-
@patterns.any? { |pattern| message.match(pattern) }
|
80
|
+
@patterns.any? { |pattern| message.respond_to?(:match) && message.match(pattern) }
|
65
81
|
end
|
66
82
|
|
67
83
|
end
|
data/lib/yell/version.rb
CHANGED
data/lib/yell.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2011-2013 Rudolf Schmidt
|
1
|
+
# Copyright (c) 2011-2014 Rudolf Schmidt
|
4
2
|
#
|
5
3
|
# Permission is hereby granted, free of charge, to any person obtaining
|
6
4
|
# a copy of this software and associated documentation files (the
|
@@ -22,7 +20,6 @@
|
|
22
20
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
21
|
|
24
22
|
module Yell #:nodoc:
|
25
|
-
|
26
23
|
# Holds all Yell severities
|
27
24
|
Severities = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL', 'UNKNOWN'].freeze
|
28
25
|
|
@@ -60,8 +57,8 @@ module Yell #:nodoc:
|
|
60
57
|
# Shortcut to Yell::Fomatter.new
|
61
58
|
#
|
62
59
|
# @return [Yell::Formatter] A Yell::Formatter instance
|
63
|
-
def format( pattern, date_pattern = nil )
|
64
|
-
Yell::Formatter.new(pattern, date_pattern)
|
60
|
+
def format( pattern = nil, date_pattern = nil, &block )
|
61
|
+
Yell::Formatter.new(pattern, date_pattern, &block)
|
65
62
|
end
|
66
63
|
|
67
64
|
# Loads a config from a YAML file
|
@@ -71,6 +68,11 @@ module Yell #:nodoc:
|
|
71
68
|
Yell.new Yell::Configuration.load!(file)
|
72
69
|
end
|
73
70
|
|
71
|
+
# Shortcut to Yell::Adapters.register
|
72
|
+
def register( name, klass )
|
73
|
+
Yell::Adapters.register(name, klass)
|
74
|
+
end
|
75
|
+
|
74
76
|
# @private
|
75
77
|
def env
|
76
78
|
return ENV['YELL_ENV'] if ENV.key? 'YELL_ENV'
|
@@ -85,27 +87,34 @@ module Yell #:nodoc:
|
|
85
87
|
end
|
86
88
|
|
87
89
|
# @private
|
88
|
-
def
|
90
|
+
def __deprecate__( version, message, options = {} ) #:nodoc:
|
89
91
|
messages = ["Deprecation Warning (since v#{version}): #{message}" ]
|
90
92
|
messages << " before: #{options[:before]}" if options[:before]
|
91
93
|
messages << " after: #{options[:after]}" if options[:after]
|
92
94
|
|
93
|
-
|
95
|
+
__warn__(*messages)
|
94
96
|
end
|
95
97
|
|
96
98
|
# @private
|
97
|
-
def
|
99
|
+
def __warn__( *messages ) #:nodoc:
|
98
100
|
$stderr.puts "[Yell] " + messages.join("\n")
|
99
101
|
rescue Exception => e
|
100
102
|
# do nothing
|
101
103
|
end
|
102
|
-
end
|
103
104
|
|
105
|
+
# @private
|
106
|
+
def __fetch__( hash, *args )
|
107
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
108
|
+
value = args.map { |key| hash.fetch(key.to_sym, hash[key.to_s]) }.compact.first
|
109
|
+
|
110
|
+
value.nil? ? options[:default] : value
|
111
|
+
end
|
112
|
+
end
|
104
113
|
end
|
105
114
|
|
106
115
|
# helpers
|
107
116
|
require File.dirname(__FILE__) + '/yell/helpers/base'
|
108
|
-
require File.dirname(__FILE__) + '/yell/helpers/
|
117
|
+
require File.dirname(__FILE__) + '/yell/helpers/adapter'
|
109
118
|
require File.dirname(__FILE__) + '/yell/helpers/formatter'
|
110
119
|
require File.dirname(__FILE__) + '/yell/helpers/level'
|
111
120
|
require File.dirname(__FILE__) + '/yell/helpers/tracer'
|
@@ -124,3 +133,12 @@ require File.dirname(__FILE__) + '/yell/logger'
|
|
124
133
|
# modules
|
125
134
|
require File.dirname(__FILE__) + '/yell/loggable'
|
126
135
|
|
136
|
+
# core extensions
|
137
|
+
require File.dirname(__FILE__) + '/core_ext/logger'
|
138
|
+
|
139
|
+
# register known adapters
|
140
|
+
Yell.register :null, Yell::Adapters::Base # adapter that does nothing (for convenience only)
|
141
|
+
Yell.register :file, Yell::Adapters::File
|
142
|
+
Yell.register :datefile, Yell::Adapters::Datefile
|
143
|
+
Yell.register :stdout, Yell::Adapters::Stdout
|
144
|
+
Yell.register :stderr, Yell::Adapters::Stderr
|