diff options
author | Adam Jacob <adam@hjksolutions.com> | 2009-03-11 13:25:45 -0700 |
---|---|---|
committer | Adam Jacob <adam@hjksolutions.com> | 2009-03-11 13:25:45 -0700 |
commit | a136f9823b8b0fa01da4e758e64c89bbab0036dc (patch) | |
tree | 9eece42b81546f39e6fe460e093f41d646a285c4 /lib | |
download | mixlib-log-a136f9823b8b0fa01da4e758e64c89bbab0036dc.tar.gz |
Initial commit
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mixlib/log.rb | 84 | ||||
-rw-r--r-- | lib/mixlib/log/formatter.rb | 56 |
2 files changed, 140 insertions, 0 deletions
diff --git a/lib/mixlib/log.rb b/lib/mixlib/log.rb new file mode 100644 index 0000000..1f64c5a --- /dev/null +++ b/lib/mixlib/log.rb @@ -0,0 +1,84 @@ +# +# Author:: Adam Jacob (<adam@opscode.com>) +# Copyright:: Copyright (c) 2008 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +require 'mixlib/log/formatter' +require 'logger' + +module Mixlib + module Log + + @logger = nil + + attr_accessor :logger #:nodoc + + # Use Mixlib::Log.init when you want to set up the logger manually. Arguments to this method + # get passed directly to Logger.new, so check out the documentation for the standard Logger class + # to understand what to do here. + # + # If this method is called with no arguments, it will log to STDOUT at the :info level. + # + # It also configures the Logger instance it creates to use the custom Mixlib::Log::Formatter class. + def init(*opts) + if opts.length == 0 + @logger = Logger.new(STDOUT) + else + @logger = Logger.new(*opts) + end + @logger.formatter = Mixlib::Log::Formatter.new() + end + + # Sets the level for the Logger object by symbol. Valid arguments are: + # + # :debug + # :info + # :warn + # :error + # :fatal + # + # Throws an ArgumentError if you feed it a bogus log level. + def level(loglevel=:warn) + init() unless @logger + case loglevel + when :debug + @logger.level = Logger::DEBUG + when :info + @logger.level = Logger::INFO + when :warn + @logger.level = Logger::WARN + when :error + @logger.level = Logger::ERROR + when :fatal + @logger.level = Logger::FATAL + else + raise ArgumentError, "Log level must be one of :debug, :info, :warn, :error, or :fatal" + end + end + + # Passes any other method calls on directly to the underlying Logger object created with init. If + # this method gets hit before a call to Mixlib::Logger.init has been made, it will call + # Mixlib::Logger.init() with no arguments. + def method_missing(method_symbol, *args) + init() unless @logger + if args.length > 0 + @logger.send(method_symbol, *args) + else + @logger.send(method_symbol) + end + end + + end +end
\ No newline at end of file diff --git a/lib/mixlib/log/formatter.rb b/lib/mixlib/log/formatter.rb new file mode 100644 index 0000000..54ea3fe --- /dev/null +++ b/lib/mixlib/log/formatter.rb @@ -0,0 +1,56 @@ +# +# Author:: Adam Jacob (<adam@opscode.com>) +# Copyright:: Copyright (c) 2008 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +require 'logger' +require 'time' + +module Mixlib + module Log + class Formatter < Logger::Formatter + @@show_time = true + + def self.show_time=(show=false) + @@show_time = show + end + + # Prints a log message as '[time] severity: message' if Chef::Log::Formatter.show_time == true. + # Otherwise, doesn't print the time. + def call(severity, time, progname, msg) + if @@show_time + sprintf("[%s] %s: %s\n", time.rfc2822(), severity, msg2str(msg)) + else + sprintf("%s: %s\n", severity, msg2str(msg)) + end + end + + # Converts some argument to a Logger.severity() call to a string. Regular strings pass through like + # normal, Exceptions get formatted as "message (class)\nbacktrace", and other random stuff gets + # put through "object.inspect" + def msg2str(msg) + case msg + when ::String + msg + when ::Exception + "#{ msg.message } (#{ msg.class })\n" << + (msg.backtrace || []).join("\n") + else + msg.inspect + end + end + end + end +end
\ No newline at end of file |