dldinternet-mixlib-logging 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTIzNTYxZTA1NTBiODIxNzc3ZTMyNDJjYTA1NDU0MjRkYWQ5OTAyOQ==
4
+ MWVlYjUwZTM1OTJhM2VlZTI2MmJhMWNiZjRhOWRhOTdhMTQwNzBhNQ==
5
5
  data.tar.gz: !binary |-
6
- NGFjMzlmMDVkNmM0YzM5NTczODVhYTE1YzRlYzQxZTAyNTQyODZhMw==
6
+ Yzc0Nzg1NGZlNWY4OTMyNjA0NTdkYmIxMjVjY2IwZjYwYzdhNWVmMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWViMDIxNTQ3MjJhYWZlNWYwOTBjZTM3NzBiYmZkNmI4ODA1ZDNkZjFkODEz
10
- Y2Y3YzdmZGU1OTNlNTYxOTFjMjEyNzAyMjRkZGRhNGRlNmJhYTMyZGVjMzFm
11
- MWI2ZjA4NTc3M2ZjMjExNmQ4OWYyMzhhOGFmYzU5ZWE4ZTIyNWU=
9
+ MjU5NjMzYmRmN2RhZmJhODJhNDBmMjM3OWY3N2I4NWE2YjIxYzk2ZjI1MWFl
10
+ Y2NiYWM0MTViNTljYmU5YWY4ZThlZjVhY2Y3MjAxOTM3MjM2MmNkYWQ4YzIw
11
+ NTgwYzdlZjNkMTA2NGRiN2I2YjUzNWQ1MzFmYmMzZDg3ZTdiMzU=
12
12
  data.tar.gz: !binary |-
13
- YzJlNDAwNzRkYzUxNTIzZTJjOGJhNGQwNWI3ZTI5MjkwOGQ2Y2JiODA4NjFm
14
- YWMyZjJjMWJjZDc0ZDAyMzVkZGU1YTRkYThjZWVkZTlmY2JhNDdlNTM4MDYx
15
- NzBkMWI0NDBkYWI0ZGI4NTY0YjhmYzA2MmQ2YjAwMzA0ZmQwNGQ=
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
- if num >= #{logger.level}
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
@@ -2,7 +2,7 @@ module Dldinternet
2
2
  module Mixlib
3
3
  module Logging
4
4
  # dldinternet-mixlib-logging version
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
8
8
  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.2.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-28 00:00:00.000000000 Z
11
+ date: 2014-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logging