Class: Flapjack::Logger
- Inherits:
-
Object
- Object
- Flapjack::Logger
- Defined in:
- lib/flapjack/logger.rb
Constant Summary collapse
- LEVELS =
[:debug, :info, :warn, :error, :fatal]
- SEVERITY_LABELS =
%w(DEBUG INFO WARN ERROR FATAL)
- SYSLOG_LEVELS =
[::Syslog::Constants::LOG_DEBUG, ::Syslog::Constants::LOG_INFO, ::Syslog::Constants::LOG_WARNING, ::Syslog::Constants::LOG_ERR, ::Syslog::Constants::LOG_CRIT ]
Class Method Summary collapse
Instance Method Summary collapse
- #add(severity, message = nil, progname = nil, &block) ⇒ Object
- #close ⇒ Object
- #configure(config) ⇒ Object
-
#initialize(name, config = {}) ⇒ Logger
constructor
A new instance of Logger.
- #respond_to?(sym) ⇒ Boolean
Constructor Details
#initialize(name, config = {}) ⇒ Logger
Returns a new instance of Logger.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/flapjack/logger.rb', line 42 def initialize(name, config = {}) config ||= {} @name = name @formatter = proc do |severity, datetime, progname, msg| t = datetime.iso8601(6) "#{t} [#{severity}] :: #{@name} :: #{msg}\n" end output = if config[:file].nil? || config[:file].empty? || !File.exists?(File.dirname(config[:file])) || !File.writable?(File.dirname(config[:file])) || (File.exists?(config[:file]) && !File.writable?(config[:file])) STDOUT else config[:file] end @logger = ::Logger.new(output) @logger.formatter = @formatter configure(config) end |
Class Method Details
.syslog_add(severity, message, name) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/flapjack/logger.rb', line 100 def self.syslog_add(severity, , name) @lock ||= Monitor.new @lock.synchronize do level = SYSLOG_LEVELS[severity] t = Time.now.iso8601 l = SEVERITY_LABELS[severity] begin Syslog.open('flapjack', (Syslog::Constants::LOG_PID | Syslog::Constants::LOG_CONS), Syslog::Constants::LOG_USER) Syslog.mask = Syslog::LOG_UPTO(::Syslog::Constants::LOG_ERR) Syslog.log(level, "#{t} [#{l}] :: #{name} :: %s", ) ensure Syslog.close end end end |
Instance Method Details
#add(severity, message = nil, progname = nil, &block) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/flapjack/logger.rb', line 117 def add(severity, = nil, progname = nil, &block) raise "Cannot log with a closed logger" if @logger.nil? @logger.add(severity, , progname, &block) if severity >= @level progname ||= 'flapjack' if .nil? if block_given? = yield else = progname progname = 'flapjack' end end end Flapjack::Logger.syslog_add(severity, , @name) if @use_syslog end |
#close ⇒ Object
94 95 96 97 98 |
# File 'lib/flapjack/logger.rb', line 94 def close raise "Already closed" if @logger.nil? @logger.close @logger = nil end |
#configure(config) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/flapjack/logger.rb', line 68 def configure(config) raise "Cannot configure closed logger" if @logger.nil? level = config['level'] # we'll let Logger spit the dummy on invalid level values -- but will # assume INFO if nothing is provided if level.nil? || level.empty? level = 'INFO' end err = nil @level = begin ::Logger.const_get(level.upcase) rescue NameError err = "Unknown Logger severity level '#{level.upcase}', using INFO..." ::Logger::INFO end @logger.error(err) if err @logger.level = @level @use_syslog = config.has_key?('syslog_errors') && config['syslog_errors'] end |
#respond_to?(sym) ⇒ Boolean
141 142 143 |
# File 'lib/flapjack/logger.rb', line 141 def respond_to?(sym) (LEVELS + [:configure, :close, :add]).include?(sym) end |