dldinternet-mixlib-logging 0.2.0 → 0.3.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 +8 -8
- data/lib/dldinternet/mixlib/logging.rb +193 -8
- data/lib/dldinternet/mixlib/logging/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWVlYjUwZTM1OTJhM2VlZTI2MmJhMWNiZjRhOWRhOTdhMTQwNzBhNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Yzc0Nzg1NGZlNWY4OTMyNjA0NTdkYmIxMjVjY2IwZjYwYzdhNWVmMQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjU5NjMzYmRmN2RhZmJhODJhNDBmMjM3OWY3N2I4NWE2YjIxYzk2ZjI1MWFl
|
10
|
+
Y2NiYWM0MTViNTljYmU5YWY4ZThlZjVhY2Y3MjAxOTM3MjM2MmNkYWQ4YzIw
|
11
|
+
NTgwYzdlZjNkMTA2NGRiN2I2YjUzNWQ1MzFmYmMzZDg3ZTdiMzU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTcxZjQ3Mzg0YTBlNDhlNWFhMmQxYTgzNmEwYmI1ZmNhYzRiNGExZDI1MzQx
|
14
|
+
MDgyZjg0NDY5ZDU1N2QwNTI4NmQwZmFhMDUxN2E2N2IxNzA1NjFjODI1OTcz
|
15
|
+
ZjFiYTdkYmRlYWFjZjlmM2Y1YzQ0NWFlYjRkMmE4OTkzYzhhNDQ=
|
@@ -11,6 +11,111 @@ unless defined? ::DLDInternet::Mixlib::Logging::ClassMethods
|
|
11
11
|
require 'rubygems/exceptions'
|
12
12
|
require 'logging'
|
13
13
|
|
14
|
+
module ::Logging
|
15
|
+
class << self
|
16
|
+
|
17
|
+
# call-seq:
|
18
|
+
# Logging.logger( device, age = 7, size = 1048576 )
|
19
|
+
# Logging.logger( device, age = 'weekly' )
|
20
|
+
#
|
21
|
+
# This convenience method returns a Logger instance configured to behave
|
22
|
+
# similarly to a core Ruby Logger instance.
|
23
|
+
#
|
24
|
+
# The _device_ is the logging destination. This can be a filename
|
25
|
+
# (String) or an IO object (STDERR, STDOUT, an open File, etc.). The
|
26
|
+
# _age_ is the number of old log files to keep or the frequency of
|
27
|
+
# rotation (+daily+, +weekly+, or +monthly+). The _size_ is the maximum
|
28
|
+
# logfile size and is only used when _age_ is a number.
|
29
|
+
#
|
30
|
+
# Using the same _device_ twice will result in the same Logger instance
|
31
|
+
# being returned. For example, if a Logger is created using STDOUT then
|
32
|
+
# the same Logger instance will be returned the next time STDOUT is
|
33
|
+
# used. A new Logger instance can be obtained by closing the previous
|
34
|
+
# logger instance.
|
35
|
+
#
|
36
|
+
# log1 = Logging.logger(STDOUT)
|
37
|
+
# log2 = Logging.logger(STDOUT)
|
38
|
+
# log1.object_id == log2.object_id #=> true
|
39
|
+
#
|
40
|
+
# log1.close
|
41
|
+
# log2 = Logging.logger(STDOUT)
|
42
|
+
# log1.object_id == log2.object_id #=> false
|
43
|
+
#
|
44
|
+
# The format of the log messages can be changed using a few optional
|
45
|
+
# parameters. The <tt>:pattern</tt> can be used to change the log
|
46
|
+
# message format. The <tt>:date_pattern</tt> can be used to change how
|
47
|
+
# timestamps are formatted.
|
48
|
+
#
|
49
|
+
# log = Logging.logger(STDOUT,
|
50
|
+
# :pattern => "[%d] %-5l : %m\n",
|
51
|
+
# :date_pattern => "%Y-%m-%d %H:%M:%S.%s")
|
52
|
+
#
|
53
|
+
# See the documentation for the Logging::Layouts::Pattern class for a
|
54
|
+
# full description of the :pattern and :date_pattern formatting strings.
|
55
|
+
#
|
56
|
+
def logger( *args )
|
57
|
+
return ::Logging::Logger if args.empty?
|
58
|
+
|
59
|
+
opts = args.pop if args.last.instance_of?(Hash)
|
60
|
+
opts ||= Hash.new
|
61
|
+
|
62
|
+
dev = args.shift
|
63
|
+
keep = age = args.shift
|
64
|
+
size = args.shift
|
65
|
+
|
66
|
+
name = case dev
|
67
|
+
when String; dev
|
68
|
+
when File; dev.path
|
69
|
+
else dev.object_id.to_s end
|
70
|
+
|
71
|
+
repo = ::Logging::Repository.instance
|
72
|
+
return repo[name] if repo.has_logger? name
|
73
|
+
|
74
|
+
l_opts = {
|
75
|
+
:pattern => "%.1l, [%d #%p] %#{::Logging::MAX_LEVEL_LENGTH}l : %m\n",
|
76
|
+
:date_pattern => '%Y-%m-%dT%H:%M:%S.%s'
|
77
|
+
}
|
78
|
+
[:pattern, :date_pattern, :date_method].each do |o|
|
79
|
+
l_opts[o] = opts.delete(o) if opts.has_key? o
|
80
|
+
end
|
81
|
+
layout = ::Logging::Layouts::Pattern.new(l_opts)
|
82
|
+
|
83
|
+
a_opts = Hash.new
|
84
|
+
a_opts[:size] = size if size.instance_of?(Fixnum)
|
85
|
+
a_opts[:age] = age if age.instance_of?(String)
|
86
|
+
a_opts[:keep] = keep if keep.instance_of?(Fixnum)
|
87
|
+
a_opts[:filename] = dev if dev.instance_of?(String)
|
88
|
+
a_opts[:layout] = layout
|
89
|
+
a_opts.merge! opts
|
90
|
+
|
91
|
+
appender =
|
92
|
+
case dev
|
93
|
+
when String
|
94
|
+
::Logging::Appenders::RollingFile.new(name, a_opts)
|
95
|
+
else
|
96
|
+
::Logging::Appenders::IO.new(name, dev, a_opts)
|
97
|
+
end
|
98
|
+
|
99
|
+
logger = ::Logging::Logger.new(name, opts)
|
100
|
+
logger.add_appenders appender
|
101
|
+
logger.additive = false
|
102
|
+
|
103
|
+
class << logger
|
104
|
+
def close
|
105
|
+
@appenders.each {|a| a.close}
|
106
|
+
h = ::Logging::Repository.instance.instance_variable_get :@h
|
107
|
+
h.delete(@name)
|
108
|
+
class << self; undef :close; end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
logger
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
14
119
|
class ::Logging::ColorScheme
|
15
120
|
def scheme(s=nil)
|
16
121
|
@scheme = s if s
|
@@ -25,6 +130,10 @@ unless defined? ::DLDInternet::Mixlib::Logging::ClassMethods
|
|
25
130
|
code = "undef :#{name} if method_defined? :#{name}\n"
|
26
131
|
code << "undef :#{name}? if method_defined? :#{name}?\n"
|
27
132
|
|
133
|
+
unless logger.level.is_a?(Fixnum)
|
134
|
+
puts "logger.level for #{logger.name} is a #{logger.level.class} instead of a Fixnum!!!"
|
135
|
+
exit -1
|
136
|
+
end
|
28
137
|
if logger.level > num
|
29
138
|
code << <<-CODE
|
30
139
|
def #{name}?( ) false end
|
@@ -36,7 +145,8 @@ unless defined? ::DLDInternet::Mixlib::Logging::ClassMethods
|
|
36
145
|
def #{name}( data = nil, trace = nil )
|
37
146
|
caller = Kernel.caller[3]
|
38
147
|
num = #{num}
|
39
|
-
|
148
|
+
level = #{logger.level}
|
149
|
+
if num >= level
|
40
150
|
data = yield if block_given?
|
41
151
|
#log_event(::Logging::LogEvent.new(@name, num, caller, true))
|
42
152
|
log_event(::Logging::LogEvent.new(@name, num, data, trace.nil? ? @trace : trace))
|
@@ -50,8 +160,77 @@ unless defined? ::DLDInternet::Mixlib::Logging::ClassMethods
|
|
50
160
|
end
|
51
161
|
logger
|
52
162
|
end
|
163
|
+
|
164
|
+
# Overrides the new method such that only one Logger will be created
|
165
|
+
# for any given logger name.
|
166
|
+
#
|
167
|
+
def new( *args )
|
168
|
+
return super if args.empty?
|
169
|
+
|
170
|
+
repo = ::Logging::Repository.instance
|
171
|
+
name = repo.to_key(args.shift)
|
172
|
+
opts = args.last.instance_of?(Hash) ? args.pop : {}
|
173
|
+
|
174
|
+
@mutex.synchronize do
|
175
|
+
logger = repo[name]
|
176
|
+
if logger.nil?
|
177
|
+
|
178
|
+
master = repo.master_for(name)
|
179
|
+
if master
|
180
|
+
if repo.has_logger?(master)
|
181
|
+
logger = repo[master]
|
182
|
+
else
|
183
|
+
logger = super(master)
|
184
|
+
repo[master] = logger
|
185
|
+
repo.children(master).each {|c| c.__send__(:parent=, logger)}
|
186
|
+
end
|
187
|
+
repo[name] = logger
|
188
|
+
else
|
189
|
+
logger = super(name, opts)
|
190
|
+
repo[name] = logger
|
191
|
+
repo.children(name).each {|c| c.__send__(:parent=, logger)}
|
192
|
+
end
|
193
|
+
end
|
194
|
+
logger
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
199
|
+
|
200
|
+
# call-seq:
|
201
|
+
# Logger.new( name )
|
202
|
+
# Logger[name]
|
203
|
+
#
|
204
|
+
# Returns the logger identified by _name_.
|
205
|
+
#
|
206
|
+
# When _name_ is a +String+ or a +Symbol+ it will be used "as is" to
|
207
|
+
# retrieve the logger. When _name_ is a +Class+ the class name will be
|
208
|
+
# used to retrieve the logger. When _name_ is an object the name of the
|
209
|
+
# object's class will be used to retrieve the logger.
|
210
|
+
#
|
211
|
+
# Example:
|
212
|
+
#
|
213
|
+
# obj = MyClass.new
|
214
|
+
#
|
215
|
+
# log1 = Logger.new(obj)
|
216
|
+
# log2 = Logger.new(MyClass)
|
217
|
+
# log3 = Logger['MyClass']
|
218
|
+
#
|
219
|
+
# log1.object_id == log2.object_id # => true
|
220
|
+
# log2.object_id == log3.object_id # => true
|
221
|
+
#
|
222
|
+
def initialize( name, *args )
|
223
|
+
case name
|
224
|
+
when String
|
225
|
+
raise(ArgumentError, "logger must have a name") if name.empty?
|
226
|
+
else raise(ArgumentError, "logger name must be a String") end
|
227
|
+
|
228
|
+
repo = ::Logging::Repository.instance
|
229
|
+
opts = args.last.instance_of?(Hash) ? args.pop : {}
|
230
|
+
_setup(name, opts.merge({:parent => repo.parent(name)}))
|
53
231
|
end
|
54
232
|
|
233
|
+
|
55
234
|
def logEvent(evt)
|
56
235
|
log_event evt
|
57
236
|
end
|
@@ -62,37 +241,42 @@ unless defined? ::DLDInternet::Mixlib::Logging::ClassMethods
|
|
62
241
|
verbose, $VERBOSE = $VERBOSE, nil
|
63
242
|
# noinspection RubyStringKeysInHashInspection
|
64
243
|
DIRECTIVE_TABLE = {
|
244
|
+
'C' => 'event.file != "" ? "(\e[38;5;25m#{event.file}::#{event.line}\e[0m)" : ""',
|
65
245
|
'c' => 'event.logger'.freeze,
|
66
246
|
'd' => 'format_date(event.time)'.freeze,
|
67
247
|
'F' => 'event.file'.freeze,
|
248
|
+
'f' => 'File.basename(event.file)'.freeze,
|
249
|
+
'g' => 'event.file != "" ? "(\e[38;5;25m#{File.join(File.dirname(event.file).split(File::SEPARATOR)[-2..-1],File.basename(event.file))}::#{event.line}\e[0m)" : ""',
|
68
250
|
'l' => '::Logging::LNAMES[event.level]'.freeze,
|
69
251
|
'L' => 'event.line'.freeze,
|
70
|
-
'm' => 'format_obj(event.data)'.freeze,
|
71
252
|
'M' => 'event.method'.freeze,
|
253
|
+
'm' => 'format_obj(event.data)'.freeze,
|
72
254
|
'p' => 'Process.pid'.freeze,
|
73
255
|
'r' => 'Integer((event.time-@created_at)*1000).to_s'.freeze,
|
74
256
|
't' => 'Thread.current.object_id.to_s'.freeze,
|
75
257
|
'T' => 'Thread.current[:name]'.freeze,
|
76
|
-
'C' => 'event.file != "" ? "(\e[38;5;25m#{event.file}::#{event.line}\e[0m)" : ""',
|
77
258
|
'%' => :placeholder
|
78
259
|
}.freeze
|
79
260
|
|
80
261
|
# Human name aliases for directives - used for colorization of tokens
|
81
262
|
# noinspection RubyStringKeysInHashInspection
|
82
263
|
COLOR_ALIAS_TABLE = {
|
264
|
+
'C' => :file_line,
|
83
265
|
'c' => :logger,
|
84
266
|
'd' => :date,
|
267
|
+
'F' => :file,
|
268
|
+
'f' => :file,
|
269
|
+
'g' => :file,
|
270
|
+
'L' => :line,
|
271
|
+
'l' => :logger,
|
272
|
+
'M' => :method,
|
85
273
|
'm' => :message,
|
86
274
|
'p' => :pid,
|
87
275
|
'r' => :time,
|
88
276
|
'T' => :thread,
|
89
277
|
't' => :thread_id,
|
90
|
-
'F' => :file,
|
91
|
-
'L' => :line,
|
92
|
-
'M' => :method,
|
93
278
|
'X' => :mdc,
|
94
279
|
'x' => :ndc,
|
95
|
-
'C' => :file_line,
|
96
280
|
}.freeze
|
97
281
|
|
98
282
|
ensure
|
@@ -247,7 +431,8 @@ unless defined? ::DLDInternet::Mixlib::Logging::ClassMethods
|
|
247
431
|
@logger_args = args
|
248
432
|
rescue Gem::LoadError
|
249
433
|
logger = FakeLogger.new
|
250
|
-
rescue => e
|
434
|
+
rescue Exception => e
|
435
|
+
puts e
|
251
436
|
# not installed
|
252
437
|
logger = FakeLogger.new
|
253
438
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dldinternet-mixlib-logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christo De Lange
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logging
|