484ef42404f66e3ca3846f93ada86793b83c06e2
[packages/precise/mcollective.git] / lib / mcollective / logger / file_logger.rb
1 require 'logger'
2
3 module MCollective
4   module Logger
5     # Impliments a file based logger using the standard ruby logger class
6     #
7     # To configure you should set:
8     #
9     #   - config.logfile
10     #   - config.keeplogs defaults to 2097152
11     #   - config.max_log_size defaults to 5
12     class File_logger<Base
13       def start
14         config = Config.instance
15
16         @logger = ::Logger.new(config.logfile, config.keeplogs, config.max_log_size)
17         @logger.formatter = ::Logger::Formatter.new
18
19         set_level(config.loglevel.to_sym)
20       end
21
22       def set_logging_level(level)
23         @logger.level = map_level(level)
24       rescue Exception => e
25         @logger.level = ::Logger::DEBUG
26         log(:error, "", "Could not set logging to #{level} using debug instead: #{e.class} #{e}")
27       end
28
29       def valid_levels
30         {:info  => ::Logger::INFO,
31          :warn  => ::Logger::WARN,
32          :debug => ::Logger::DEBUG,
33          :fatal => ::Logger::FATAL,
34          :error => ::Logger::ERROR}
35       end
36
37       def log(level, from, msg)
38         @logger.add(map_level(level)) { "#{from} #{msg}" }
39       rescue
40         # if this fails we probably cant show the user output at all,
41         # STDERR it as last resort
42         STDERR.puts("#{level}: #{msg}")
43       end
44     end
45   end
46 end