# encoding: utf-8
# You can use arbitrary logger which responds to #debug, #info, #error and #fatal methods, so for example the logger from standard library will work fine:
#
# AMQ::Client.logging = true
# AMQ::Client.logger = MyLogger.new(STDERR)
#
# AMQ::Client.logger defaults to a new instance of Ruby stdlib logger.
#
# If you want to be able to log messages just from specified classes or even instances, just make the instance respond to #logging and set it to desired value. So for example Queue.class_eval { def logging; true; end } will turn on logging for the whole Queue class whereas queue = Queue.new; def queue.logging; false; end will disable logging for given Queue instance.
module AMQ
module Client
module Logging
def self.included(klass)
unless klass.method_defined?(:client)
raise NotImplementedError.new("Class #{klass} has to provide #client method!")
end
end
def self.logging
@logging ||= false
end
def self.logging=(boolean)
@logging = boolean
end
REQUIRED_METHODS = [:debug, :info, :error, :fatal].freeze
def debug(message)
log(:debug, message)
end
def info(message)
log(:info, message)
end
def error(message)
log(:error, message)
end
def fatal(message)
log(:fatal, message)
end
protected
def log(method, message)
if self.respond_to?(:logging) ? self.logging : AMQ::Client::Logging.logging
self.client.logger.__send__(method, message)
message
end
end
end
end
end