Class: SemanticLogger::Formatters::Syslog

Inherits:
Default
  • Object
show all
Defined in:
lib/semantic_logger/formatters/syslog.rb

Constant Summary collapse

DEFAULT_LEVEL_MAP =

Default mapping of ruby log levels to syslog log levels

::Syslog::LOG_EMERG - “System is unusable” ::Syslog::LOG_ALERT - “Action needs to be taken immediately” ::Syslog::LOG_CRIT - “A critical condition has occurred” ::Syslog::LOG_ERR - “An error occurred” ::Syslog::LOG_WARNING - “Warning of a possible problem” ::Syslog::LOG_NOTICE - “A normal but significant condition occurred” ::Syslog::LOG_INFO - “Informational message” ::Syslog::LOG_DEBUG - “Debugging information”

{
  fatal: ::Syslog::LOG_CRIT,
  error: ::Syslog::LOG_ERR,
  warn:  ::Syslog::LOG_WARNING,
  info:  ::Syslog::LOG_NOTICE,
  debug: ::Syslog::LOG_INFO,
  trace: ::Syslog::LOG_DEBUG
}.freeze

Instance Attribute Summary collapse

Attributes inherited from Base

#log_application, #log_host, #precision, #time_format

Instance Method Summary collapse

Methods inherited from Base

#format_time

Constructor Details

#initialize(options = {}) ⇒ Syslog

Create a Syslog Log Formatter

Parameters:

options: [Integer]
  Default: ::Syslog::LOG_PID | ::Syslog::LOG_CONS
  Any of the following (options can be logically OR'd together)
    ::Syslog::LOG_CONS
    ::Syslog::LOG_NDELAY
    ::Syslog::LOG_NOWAIT
    ::Syslog::LOG_ODELAY
    ::Syslog::LOG_PERROR
    ::Syslog::LOG_PID

facility: [Integer]
  Default: ::Syslog::LOG_USER
  Type of program (can be logically OR'd together)
    ::Syslog::LOG_AUTH
    ::Syslog::LOG_AUTHPRIV
    ::Syslog::LOG_CONSOLE
    ::Syslog::LOG_CRON
    ::Syslog::LOG_DAEMON
    ::Syslog::LOG_FTP
    ::Syslog::LOG_KERN
    ::Syslog::LOG_LRP
    ::Syslog::LOG_MAIL
    ::Syslog::LOG_NEWS
    ::Syslog::LOG_NTP
    ::Syslog::LOG_SECURITY
    ::Syslog::LOG_SYSLOG
    ::Syslog::LOG_USER
    ::Syslog::LOG_UUCP
    ::Syslog::LOG_LOCAL0
    ::Syslog::LOG_LOCAL1
    ::Syslog::LOG_LOCAL2
    ::Syslog::LOG_LOCAL3
    ::Syslog::LOG_LOCAL4
    ::Syslog::LOG_LOCAL5
    ::Syslog::LOG_LOCAL6
    ::Syslog::LOG_LOCAL7

level_map: [Hash]
  Supply a custom map of SemanticLogger levels to syslog levels.
  For example, passing in { warn: ::Syslog::LOG_NOTICE }
    would result in a log mapping that matches the default level map,
    except for :warn, which ends up with a LOG_NOTICE level instead of a
    LOG_WARNING one.
  Without overriding any parameters, the level map will be
    LEVEL_MAP = {
      fatal:   ::Syslog::LOG_CRIT,
      error:   ::Syslog::LOG_ERR,
      warn:    ::Syslog::LOG_WARNING,
      info:    ::Syslog::LOG_NOTICE,
      debug:   ::Syslog::LOG_INFO,
      trace:   ::Syslog::LOG_DEBUG
    }


86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/semantic_logger/formatters/syslog.rb', line 86

def initialize(options = {})
  options    = options.dup
  @options   = options.delete(:options) || (::Syslog::LOG_PID | ::Syslog::LOG_CONS)
  @facility  = options.delete(:facility) || ::Syslog::LOG_USER
  @level_map = DEFAULT_LEVEL_MAP.dup
  if level_map  = options.delete(:level_map)
    @level_map.update(level_map)
  end
  # Time is already part of Syslog packet
  options[:time_format] = nil unless options.has_key?(:time_format)
  super(options)
end

Instance Attribute Details

#facilityObject

Returns the value of attribute facility.



10
11
12
# File 'lib/semantic_logger/formatters/syslog.rb', line 10

def facility
  @facility
end

#level_mapObject

Returns the value of attribute level_map.



10
11
12
# File 'lib/semantic_logger/formatters/syslog.rb', line 10

def level_map
  @level_map
end

#optionsObject

Returns the value of attribute options.



10
11
12
# File 'lib/semantic_logger/formatters/syslog.rb', line 10

def options
  @options
end

Instance Method Details

#call(log, logger) ⇒ Object



99
100
101
102
# File 'lib/semantic_logger/formatters/syslog.rb', line 99

def call(log, logger)
  message = super(log, logger)
  create_syslog_packet(log, message)
end

#create_syslog_packet(log, message) ⇒ Object

Create Syslog Packet



105
106
107
108
109
110
111
112
113
114
# File 'lib/semantic_logger/formatters/syslog.rb', line 105

def create_syslog_packet(log, message)
  packet          = SyslogProtocol::Packet.new
  packet.hostname = host
  packet.facility = facility
  packet.tag      = application.gsub(' ', '')
  packet.content  = message
  packet.time     = log.time
  packet.severity = level_map[log.level]
  packet.to_s
end