63 lines
1.9 KiB
Ruby
63 lines
1.9 KiB
Ruby
# -*- coding: binary -*-
|
|
module Net; module SSH
|
|
|
|
# A simple module to make logging easier to deal with. It assumes that the
|
|
# logger instance (if not nil) quacks like a Logger object (in Ruby's
|
|
# standard library). Although used primarily internally by Net::SSH, it
|
|
# can easily be used to add Net::SSH-like logging to your own programs.
|
|
#
|
|
# class MyClass
|
|
# include Net::SSH::Loggable
|
|
# end
|
|
#
|
|
# Net::SSH.start(...) do |ssh|
|
|
# obj = MyClass.new
|
|
# obj.logger = ssh.logger
|
|
# ...
|
|
# end
|
|
module Loggable
|
|
# The logger instance that will be used to log messages. If nil, nothing
|
|
# will be logged.
|
|
attr_accessor :logger
|
|
|
|
# Displays the result of yielding if the log level is Logger::DEBUG or
|
|
# greater.
|
|
def debug
|
|
logger.add(Logger::DEBUG, nil, facility) { yield } if logger
|
|
end
|
|
|
|
# Displays the result of yielding if the log level is Logger::INFO or
|
|
# greater.
|
|
def info
|
|
logger.add(Logger::INFO, nil, facility) { yield } if logger
|
|
end
|
|
|
|
# Displays the result of yielding if the log level is Logger::WARN or
|
|
# greater. (Called lwarn to avoid shadowing with Kernel#warn.)
|
|
def lwarn
|
|
logger.add(Logger::WARN, nil, facility) { yield } if logger
|
|
end
|
|
|
|
# Displays the result of yielding if the log level is Logger:ERROR or
|
|
# greater.
|
|
def error
|
|
logger.add(Logger::ERROR, nil, facility) { yield } if logger
|
|
end
|
|
|
|
# Displays the result of yielding if the log level is Logger::FATAL or
|
|
# greater.
|
|
def fatal
|
|
logger.add(Logger::FATAL, nil, facility) { yield } if logger
|
|
end
|
|
|
|
private
|
|
|
|
# Sets the "facility" value, used for reporting where a log message
|
|
# originates. It defaults to the name of class with the object_id
|
|
# appended.
|
|
def facility
|
|
@facility ||= self.class.name.gsub(/::/, ".").gsub(/([a-z])([A-Z])/, "\\1_\\2").downcase + "[%x]" % object_id
|
|
end
|
|
end
|
|
end; end
|