Initializes default options for the logger
ident
the name of your program [default=$0].
options
syslog options [default=Syslog::LOG_PID | Syslog::LOG_CONS].
Correct values are:
LOG_CONS : writes the message on the console if an error occurs when sending the message; LOG_NDELAY : no delay before sending the message; LOG_PERROR : messages will also be written on STDERR; LOG_PID : adds the process number to the message (just after the program name)
facility
the syslog facility [default=nil] Correct values include:
Syslog::LOG_DAEMON Syslog::LOG_USER Syslog::LOG_SYSLOG Syslog::LOG_LOCAL2 Syslog::LOG_NEWS etc.
Usage:
logger = Syslogger.new("my_app", Syslog::LOG_PID | Syslog::LOG_CONS, Syslog::LOG_LOCAL0)
logger.level = Logger::INFO # use Logger levels
logger.warn "warning message"
logger.debug "debug message"
logger.info "my_subapp" { "Some lazily computed message" }
# File lib/syslogger.rb, line 47 def initialize(ident = $0, options = Syslog::LOG_PID | Syslog::LOG_CONS, facility = nil) @ident = ident @options = options || (Syslog::LOG_PID | Syslog::LOG_CONS) @facility = facility @level = Logger::INFO @formatter = proc do |severity, datetime, progname, msg| msg end end
Logs a message at the Logger::INFO level.
# File lib/syslogger.rb, line 79 def <<(msg) add(Logger::INFO, msg) end
Low level method to add a message.
severity
the level of the message. One of Logger::DEBUG, Logger::INFO, Logger::WARN, Logger::ERROR, Logger::FATAL, Logger::UNKNOWN
message
the message string. If nil, the method will call the block and use the result as the message string. If both are nil or no block is given, it will use the progname as per the behaviour of both the standard Ruby logger, and the Rails BufferedLogger.
progname
optionally, overwrite the program name that appears in the log message.
# File lib/syslogger.rb, line 89 def add(severity, message = nil, progname = nil, &block) if message.nil? && block.nil? && !progname.nil? message, progname = progname, nil end progname ||= @ident mask = Syslog::LOG_UPTO(MAPPING[@level]) communication = message || block && block.call formatted_communication = clean(formatter.call([severity], Time.now, progname, communication)) MUTEX.synchronize do Syslog.open(progname, @options, @facility) do |s| s.mask = mask if self.max_octets buffer = "#{tags_text}" formatted_communication.bytes do |byte| buffer.concat(byte) # if the last byte we added is potentially part of an escape, we'll go ahead and add another byte if buffer.bytesize >= self.max_octets && !['%'.ord,'\'.ord].include?(byte) s.log(MAPPING[severity],buffer) buffer = "" end end s.log(MAPPING[severity],buffer) unless buffer.empty? else s.log(MAPPING[severity],"#{tags_text}#{formatted_communication}") end end end end
Sets the ident string passed along to Syslog
# File lib/syslogger.rb, line 137 def ident=(ident) @ident = ident end
Sets the minimum level for messages to be written in the log.
level
one of Logger::DEBUG, Logger::INFO,
Logger::WARN, Logger::ERROR,
Logger::FATAL, Logger::UNKNOWN
# File lib/syslogger.rb, line 126 def level=(level) level = Logger.const_get(level.to_s.upcase) if level.is_a?(Symbol) unless level.is_a?(Fixnum) raise ArgumentError.new("Invalid logger level `#{level.inspect}`") end @level = level end
Set the max octets of the messages written to the log
# File lib/syslogger.rb, line 120 def max_octets=(max_octets) @max_octets = max_octets end
Tagging code borrowed from ActiveSupport gem
# File lib/syslogger.rb, line 142 def tagged(*tags) new_tags = push_tags(*tags) yield self ensure pop_tags(new_tags.size) end
Log a message at the Logger::INFO level. Useful for use with Rack::CommonLogger
# File lib/syslogger.rb, line 74 def write(msg) add(Logger::INFO, msg) end
Borrowed from SyslogLogger.
# File lib/syslogger.rb, line 166 def clean(message) message = message.to_s.dup message.strip! # remove whitespace message.gsub!(/\n/, '\n') # escape newlines message.gsub!(/%/, '%%') # syslog(3) freaks on % (printf) message.gsub!(/\e\[[^m]*m/, '') # remove useless ansi color codes message end