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 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