类 Syslog::Logger
Syslog::Logger
是一个 Logger
的类似物,它通过 syslog 进行日志记录,而不是写入文件。您可以使用 Syslog::Logger
在多台机器之间聚合日志。
默认情况下,Syslog::Logger
使用程序名称“ruby”,但这可以通过 Syslog::Logger.new
的第一个参数更改。
注意!您只能在第一次初始化 Syslog::Logger
时设置 Syslog::Logger
程序名称。这是 Syslog::Logger
使用 syslog 的方式的限制(在某种程度上,也是 syslog(3) 工作方式的限制)。尝试在第一次初始化后更改 Syslog::Logger
的程序名称将被忽略。
示例¶ ↑
以下将记录到本地机器上的 syslogd
require 'syslog/logger' log = Syslog::Logger.new 'my_program' log.info 'this line will be logged via syslog(3)'
此外,还可以设置 facility 来指定将使用的 facility 级别
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'
您可能需要先执行一些 syslog.conf 设置。对于 BSD 机器,请将以下行添加到 /etc/syslog.conf
!my_program *.* /var/log/my_program.log
然后触摸 /var/log/my_program.log 并用 HUP 信号 syslogd(在 FreeBSD 上为 killall -HUP syslogd)。
如果您希望日志自动滚动和存档,请参阅 newsyslog.conf(5) 和 newsyslog(8) 手册页。
常量
- LEVEL_MAP
将
Logger
警告类型映射到 syslog(3) 警告类型。来自 Ruby 应用程序的消息不被认为与来自使用 syslog(3) 的其他系统守护进程的消息一样重要,因此大多数消息都被降低了一个级别。例如,Ruby 的
Logger
的致命消息被认为是 syslog(3) 的错误。- VERSION
您正在使用的
Syslog::Logger
版本。
属性
facility 参数用于指定记录消息的程序类型。
用于Logger
兼容性的日志级别。
公共类方法
为级别meth
构建方法。
# File ext/syslog/lib/syslog/logger.rb, line 107 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
填充Logger
兼容性的变量。如果这是Syslog::Logger
的第一个实例,则可以将program_name
设置为更改记录的程序名称。可以设置facility
以指定将使用的设施级别。
由于syslog的工作方式,只能选择一个程序名称。
# File ext/syslog/lib/syslog/logger.rb, line 191 def initialize program_name = 'ruby', facility = nil @level = ::Logger::DEBUG @formatter = Formatter.new @@syslog ||= Syslog.open(program_name) @facility = (facility || @@syslog.facility) end
返回内部Syslog
对象,该对象在创建第一个实例时初始化。
# File ext/syslog/lib/syslog/logger.rb, line 93 def self.syslog @@syslog end
指定要使用的内部Syslog
对象。
# File ext/syslog/lib/syslog/logger.rb, line 100 def self.syslog= syslog @@syslog = syslog end
公共实例方法
几乎与Logger#add
相同。progname
被忽略。
# File ext/syslog/lib/syslog/logger.rb, line 203 def add severity, message = nil, progname = nil, &block severity ||= ::Logger::UNKNOWN level <= severity and @@syslog.log( (LEVEL_MAP[severity] | @facility), '%s', formatter.call(severity, Time.now, progname, (message || block.call)) ) true end
在调试(syslog 调试)日志级别记录message
,或记录从块返回的消息。
# File ext/syslog/lib/syslog/logger.rb, line 151
在错误(syslog 警告)日志级别记录message
,或记录从代码块返回的消息。
# File ext/syslog/lib/syslog/logger.rb, line 133
在致命(syslog 错误)日志级别记录message
,或记录从代码块返回的消息。
# File ext/syslog/lib/syslog/logger.rb, line 127
在信息(syslog 信息)日志级别记录message
,或记录从代码块返回的消息。
# File ext/syslog/lib/syslog/logger.rb, line 145
在未知(syslog 警报)日志级别记录message
,或记录从代码块返回的消息。
# File ext/syslog/lib/syslog/logger.rb, line 121
在警告(syslog 通知)日志级别记录message
,或记录从代码块返回的消息。
# File ext/syslog/lib/syslog/logger.rb, line 139