Class: Syslogger

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/syslogger.rb,
lib/syslogger/version.rb

Defined Under Namespace

Modules: VERSION Classes: SimpleFormatter

Constant Summary collapse

MUTEX =
Mutex.new
MAPPING =
{
  Logger::DEBUG   => Syslog::LOG_DEBUG,
  Logger::INFO    => Syslog::LOG_INFO,
  Logger::WARN    => Syslog::LOG_WARNING,
  Logger::ERROR   => Syslog::LOG_ERR,
  Logger::FATAL   => Syslog::LOG_CRIT,
  Logger::UNKNOWN => Syslog::LOG_ALERT
}.freeze
LEVELS =
%w[debug info warn error fatal unknown].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ident = $PROGRAM_NAME, options = Syslog::LOG_PID | Syslog::LOG_CONS, facility = nil) ⇒ Syslogger

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" }


53
54
55
56
57
58
59
# File 'lib/syslogger.rb', line 53

def initialize(ident = $PROGRAM_NAME, 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 = SimpleFormatter.new
end

Instance Attribute Details

#facilityObject (readonly)

Returns the value of attribute facility.



10
11
12
# File 'lib/syslogger.rb', line 10

def facility
  @facility
end

#formatterObject

Returns the value of attribute formatter.



11
12
13
# File 'lib/syslogger.rb', line 11

def formatter
  @formatter
end

#identObject

Returns the value of attribute ident.



11
12
13
# File 'lib/syslogger.rb', line 11

def ident
  @ident
end

#levelObject

Returns the value of attribute level.



10
11
12
# File 'lib/syslogger.rb', line 10

def level
  @level
end

#max_octetsObject

Returns the value of attribute max_octets.



11
12
13
# File 'lib/syslogger.rb', line 11

def max_octets
  @max_octets
end

#optionsObject (readonly)

Returns the value of attribute options.



10
11
12
# File 'lib/syslogger.rb', line 10

def options
  @options
end

Class Method Details

.gem_versionObject



5
6
7
# File 'lib/syslogger/version.rb', line 5

def self.gem_version
  Gem::Version.new VERSION::STRING
end

Instance Method Details

#add(severity, message = nil, progname = nil, &block) ⇒ Object

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.



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/syslogger.rb', line 91

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))

  # Call Syslog
  syslog_add(progname, severity, mask, formatted_communication)
end

#tagged(*tags) ⇒ Object

Tagging code borrowed from ActiveSupport gem



111
112
113
# File 'lib/syslogger.rb', line 111

def tagged(*tags)
  formatter.tagged(*tags) { yield self }
end

#write(msg) ⇒ Object Also known as: <<, puts

Log a message at the Logger::INFO level.



79
80
81
# File 'lib/syslogger.rb', line 79

def write(msg)
  add(Logger::INFO, msg)
end