Class: Logging::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/dldinternet/mixlib/logging.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, *args) ⇒ Logger

call-seq:

Logger.new( name )
Logger[name]

Returns the logger identified by name.

When name is a String or a Symbol it will be used “as is” to retrieve the logger. When name is a Class the class name will be used to retrieve the logger. When name is an object the name of the object’s class will be used to retrieve the logger.

Example:

obj = MyClass.new

log1 = Logger.new(obj)
log2 = Logger.new(MyClass)
log3 = Logger['MyClass']

log1.object_id == log2.object_id         # => true
log2.object_id == log3.object_id         # => true


318
319
320
321
322
323
324
325
326
327
# File 'lib/dldinternet/mixlib/logging.rb', line 318

def initialize( name, *args )
  case name
    when String
      raise(ArgumentError, "logger must have a name") if name.empty?
    else raise(ArgumentError, "logger name must be a String") end

  repo = ::Logging::Repository.instance
  opts = args.last.instance_of?(Hash) ? args.pop : {}
  _setup(name, opts.merge({:parent => repo.parent(name)}))
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/dldinternet/mixlib/logging.rb', line 191

def method_missing(method, *args, &block)
  num = ::Logging::LEVELS[method.to_s] rescue nil
  if num.nil?
          if method.to_s.match(/\?$/)
            num = ::Logging::LEVELS[method.to_s.gsub(/\?$/,'')] rescue nil
            unless num.nil?
              if self.level > num
                return false
              else
                return true
              end
            end
          end
          log_event(::Logging::LogEvent.new(@name, ::Logging::LEVELS[::Logging::LNAMES[-1].to_s.downcase], "Invalid logging level '#{method}'", true))
          #raise NoMethodError(method)
          false
        else
          if self.level > num
            false
          else
            unless args.empty?
              data = block_given? ?  yield : args[0]
              trce = args[1] rescue nil
              log_event(::Logging::LogEvent.new(@name, num, data, trce.nil? ? self.caller_tracing : trce))
            end
            true
          end
        end
end

Class Method Details

.define_log_methods(logger) ⇒ Object



222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# File 'lib/dldinternet/mixlib/logging.rb', line 222

def define_log_methods( logger )
  ::Logging::LEVELS.each do |name,num|
    code =  "undef :#{name}  if method_defined? :#{name}\n"
    code << "undef :#{name}? if method_defined? :#{name}?\n"

    unless logger.level.is_a?(Integer)
      puts "logger.level for #{logger.name} is a #{logger.level.class} instead of a Integer!!!"
      exit -1
    end
    # if logger.level > num
    #   code << <<-CODE
    # def #{name}?( ) false end
    # def #{name}( data = nil, trce = false ) false end
    #   CODE
    # else
    #   code << <<-CODE
    # def #{name}?( ) true end
    # def #{name}( data = nil, trce = nil )
    #   caller = Kernel.caller[3]
    #   num = #{num}
    #   level =  #{logger.level}
    #   if num >= level
    #     data = yield if block_given?
    #     #log_event(::Logging::LogEvent.new(@name, num, caller, true))
    #     log_event(::Logging::LogEvent.new(@name, num, data, trce.nil? ? self.caller_tracing : trce))
    #   end
    #   true
    # end
    #   CODE
    # end
                  #
    # logger._meta_eval(code, __FILE__, __LINE__)
  end
  logger
end

Instance Method Details

#caller_tracingObject



186
187
188
# File 'lib/dldinternet/mixlib/logging.rb', line 186

def caller_tracing
                @trace
end

#get_traceObject



334
335
336
# File 'lib/dldinternet/mixlib/logging.rb', line 334

def get_trace
  @trace
end

#logEvent(evt) ⇒ Object



330
331
332
# File 'lib/dldinternet/mixlib/logging.rb', line 330

def logEvent(evt)
  log_event evt
end

#new(*args) ⇒ Object

Overrides the new method such that only one Logger will be created for any given logger name.



262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'lib/dldinternet/mixlib/logging.rb', line 262

def new( *args )
  return super if args.empty?

  repo = ::Logging::Repository.instance
  name = repo.to_key(args.shift)
  opts = args.last.instance_of?(Hash) ? args.pop : {}

  @mutex.synchronize do
    logger = repo[name]
    if logger.nil?

      master = repo.master_for(name)
      if master
        if repo.has_logger?(master)
          logger = repo[master]
        else
          logger = super(master)
          repo[master] = logger
          repo.children(master).each {|c| c.__send__(:parent=, logger)}
        end
        repo[name] = logger
      else
        logger = super(name, opts)
        repo[name] = logger
        repo.children(name).each {|c| c.__send__(:parent=, logger)}
      end
    end
    logger
  end
end