af9e46adfd900897c6d8b6cf9332c862c4288c0b
[packages/precise/mcollective.git] / lib / mcollective / logger / syslog_logger.rb
1 module MCollective
2   module Logger
3     # Implements a syslog based logger using the standard ruby syslog class
4     class Syslog_logger<Base
5       require 'syslog'
6
7       include Syslog::Constants
8
9       def start
10         config = Config.instance
11
12         facility = syslog_facility(config.logfacility)
13         level = config.loglevel.to_sym
14
15         Syslog.close if Syslog.opened?
16         Syslog.open(File.basename($0), 3, facility)
17
18         set_level(level)
19       end
20
21       def syslog_facility(facility)
22         begin
23           Syslog.const_get("LOG_#{facility.upcase}")
24         rescue NameError => e
25           STDERR.puts "Invalid syslog facility #{facility} supplied, reverting to USER"
26           Syslog::LOG_USER
27         end
28       end
29
30       def set_logging_level(level)
31         # noop
32       end
33
34       def valid_levels
35         {:info  => :info,
36          :warn  => :warning,
37          :debug => :debug,
38          :fatal => :crit,
39          :error => :err}
40       end
41
42       def log(level, from, msg)
43         Syslog.send(map_level(level), "#{from} #{msg}")
44       rescue
45         # if this fails we probably cant show the user output at all,
46         # STDERR it as last resort
47         STDERR.puts("#{level}: #{msg}")
48       end
49     end
50   end
51 end