class 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

然后 touch /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[RW]

facility 参数用于指定记录消息的程序类型。

formatter[RW]

日志格式化程序,作为一个 Proc,它将接受四个参数并返回格式化后的消息。参数为

severity

日志消息的严重性。

time

表示消息记录时间的 Time 实例。

progname

配置的或传递给 logger 方法的 progname。

msg

用户传递给日志消息的 _Object_;不一定是 String。

该块应返回可以通过 write 写入日志设备的对象。当未设置格式化程序时,使用默认的格式化程序。

level[RW]

Logger 兼容的日志级别。

公共类方法

make_methods(meth) 点击以切换源代码

为级别 meth 构建方法。

# File syslog-0.2.0/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
new(program_name = 'ruby', facility = nil) 点击以切换源代码

填充用于 Logger 兼容性的变量。如果这是 Syslog::Logger 的第一个实例,则可以设置 program_name 来更改记录的程序名称。可以设置 facility 来指定将使用的 facility 级别。

由于 syslog 的工作方式,只能选择一个程序名称。

# File syslog-0.2.0/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() 点击以切换源代码

返回在创建第一个实例时初始化的内部 Syslog 对象。

# File syslog-0.2.0/lib/syslog/logger.rb, line 93
def self.syslog
  @@syslog
end
syslog=(syslog) 点击以切换源代码

指定要使用的内部 Syslog 对象。

# File syslog-0.2.0/lib/syslog/logger.rb, line 100
def self.syslog= syslog
  @@syslog = syslog
end

公共实例方法

add(severity, message = nil, progname = nil, &block) 点击以切换源代码

几乎复制 Logger#addprogname 被忽略。

# File syslog-0.2.0/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
debug() 点击以切换源代码

在 debug(syslog debug)日志级别记录 message,或记录从块返回的消息。

# File syslog-0.2.0/lib/syslog/logger.rb, line 151
  
error() 点击以切换源代码

在 error(syslog warning)日志级别记录 message,或记录从块返回的消息。

# File syslog-0.2.0/lib/syslog/logger.rb, line 133
  
fatal() 点击以切换源代码

在 fatal(syslog err)日志级别记录 message,或记录从块返回的消息。

# File syslog-0.2.0/lib/syslog/logger.rb, line 127
  
info() 点击以切换源代码

在 info(syslog info)日志级别记录 message,或记录从块返回的消息。

# File syslog-0.2.0/lib/syslog/logger.rb, line 145
  
unknown() 点击以切换源代码

在 unknown(syslog alert)日志级别记录 message,或记录从块返回的消息。

# File syslog-0.2.0/lib/syslog/logger.rb, line 121
  
warn() 点击以切换源代码

在 warn(syslog notice)日志级别记录 message,或记录从块返回的消息。

# File syslog-0.2.0/lib/syslog/logger.rb, line 139