Class: Syslog::Logger
- Inherits:
-
Object
- Object
- Syslog::Logger
- Defined in:
- lib/syslog/logger.rb
Overview
Syslog::Logger is a Logger work-alike that logs via syslog instead of to a file. You can use Syslog::Logger to aggregate logs between multiple machines.
By default, Syslog::Logger uses the program name ‘ruby’, but this can be changed via the first argument to Syslog::Logger.new.
NOTE! You can only set the Syslog::Logger program name when you initialize Syslog::Logger for the first time. This is a limitation of the way Syslog::Logger uses syslog (and in some ways, a limitation of the way syslog(3) works). Attempts to change Syslog::Logger’s program name after the first initialization will be ignored.
Example
The following will log to syslogd on your local machine:
require 'syslog/logger'
log = Syslog::Logger.new 'my_program'
log.info 'this line will be logged via syslog(3)'
Also the facility may be set to specify the facility level which will be used:
log.info 'this line will be logged using Syslog default facility level'
log_local1 = Syslog::Logger.new 'my_program', Syslog::LOG_LOCAL1
log_local1.info 'this line will be logged using local1 facility level'
You may need to perform some syslog.conf setup first. For a BSD machine add the following lines to /etc/syslog.conf:
!my_program
*.* /var/log/my_program.log
Then touch /var/log/my_program.log and signal syslogd with a HUP (killall -HUP syslogd, on FreeBSD).
If you wish to have logs automatically roll over and archive, see the newsyslog.conf(5) and newsyslog(8) man pages.
Defined Under Namespace
Classes: Formatter
Constant Summary collapse
- VERSION =
The version of Syslog::Logger you are using.
'2.1.0'
- LEVEL_MAP =
Maps Logger warning types to syslog(3) warning types.
Messages from Ruby applications are not considered as critical as messages from other system daemons using syslog(3), so most messages are reduced by one level. For example, a fatal message for Ruby’s Logger is considered an error for syslog(3).
{ ::Logger::UNKNOWN => Syslog::LOG_ALERT, ::Logger::FATAL => Syslog::LOG_ERR, ::Logger::ERROR => Syslog::LOG_WARNING, ::Logger::WARN => Syslog::LOG_NOTICE, ::Logger::INFO => Syslog::LOG_INFO, ::Logger::DEBUG => Syslog::LOG_DEBUG, }
Instance Attribute Summary collapse
-
#facility ⇒ Object
The facility argument is used to specify what type of program is logging the message.
-
#formatter ⇒ Object
Logging formatter, as a
Proc
that will take four arguments and return the formatted message. -
#level ⇒ Object
Log level for Logger compatibility.
Class Method Summary collapse
-
.make_methods(meth) ⇒ Object
Builds a methods for level
meth
. -
.syslog ⇒ Object
Returns the internal Syslog object that is initialized when the first instance is created.
-
.syslog=(syslog) ⇒ Object
Specifies the internal Syslog object to be used.
Instance Method Summary collapse
-
#add(severity, message = nil, progname = nil, &block) ⇒ Object
Almost duplicates Logger#add.
-
#initialize(program_name = 'ruby', facility = nil) ⇒ Logger
constructor
Fills in variables for Logger compatibility.
-
#severity ⇒ Object
:method: debug.
Constructor Details
#initialize(program_name = 'ruby', facility = nil) ⇒ Logger
Fills in variables for Logger compatibility. If this is the first instance of Syslog::Logger, program_name
may be set to change the logged program name. The facility
may be set to specify the facility level which will be used.
Due to the way syslog works, only one program name may be chosen.
190 191 192 193 194 195 196 197 |
# File 'lib/syslog/logger.rb', line 190 def initialize program_name = 'ruby', facility = nil @level = ::Logger::DEBUG @formatter = Formatter.new @@syslog ||= Syslog.open(program_name) @facility = (facility || @@syslog.facility) end |
Instance Attribute Details
#facility ⇒ Object
The facility argument is used to specify what type of program is logging the message.
181 182 183 |
# File 'lib/syslog/logger.rb', line 181 def facility @facility end |
#formatter ⇒ Object
Logging formatter, as a Proc
that will take four arguments and return the formatted message. The arguments are:
severity
-
The Severity of the log message.
time
-
A Time instance representing when the message was logged.
progname
-
The #progname configured, or passed to the logger method.
msg
-
The Object the user passed to the log message; not necessarily a String.
The block should return an Object that can be written to the logging device via write
. The default formatter is used when no formatter is set.
176 177 178 |
# File 'lib/syslog/logger.rb', line 176 def formatter @formatter end |
#level ⇒ Object
Log level for Logger compatibility.
162 163 164 |
# File 'lib/syslog/logger.rb', line 162 def level @level end |
Class Method Details
.make_methods(meth) ⇒ Object
Builds a methods for level meth
.
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/syslog/logger.rb', line 106 def self.make_methods meth level = ::Logger.const_get(meth.upcase) eval <<-EOM, nil, __FILE__, __LINE__ + 1 def #{meth}(message = nil, &block) add(#{level}, message, &block) end def #{meth}? @level <= #{level} end EOM end |
.syslog ⇒ Object
Returns the internal Syslog object that is initialized when the first instance is created.
92 93 94 |
# File 'lib/syslog/logger.rb', line 92 def self.syslog @@syslog end |
.syslog=(syslog) ⇒ Object
Specifies the internal Syslog object to be used.
99 100 101 |
# File 'lib/syslog/logger.rb', line 99 def self.syslog= syslog @@syslog = syslog end |
Instance Method Details
#add(severity, message = nil, progname = nil, &block) ⇒ Object
Almost duplicates Logger#add. progname
is ignored.
202 203 204 205 206 207 |
# File 'lib/syslog/logger.rb', line 202 def add severity, = nil, progname = nil, &block severity ||= ::Logger::UNKNOWN @level <= severity and @@syslog.log( (LEVEL_MAP[severity] | @facility), '%s', formatter.call(severity, Time.now, progname, ( || block.call)) ) true end |
#severity ⇒ Object
:method: debug
Logs a message
at the debug (syslog debug) log level, or logs the message returned from the block.
155 156 157 |
# File 'lib/syslog/logger.rb', line 155 Logger::Severity::constants.each do |severity| make_methods severity.downcase end |