類別 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)'

另外,可以設定功能以指定將使用的功能層級

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[RW]

facility 參數用於指定記錄訊息的程式類型。

formatter[RW]

記錄格式化器,作為一個會接收四個參數並傳回格式化訊息的 Proc。參數為

嚴重性

記錄訊息的嚴重性。

時間

一個表示訊息記錄時間的 時間 實例。

程式名稱

已設定或傳遞給記錄器方法的程式名稱。

訊息

使用者傳遞給記錄訊息的 物件;不一定是 字串

區塊應傳回一個可透過 write 寫入記錄裝置的 物件。未設定格式化器時會使用預設格式化器。

level[RW]

記錄器 相容的記錄層級。

公開類別方法

make_methods(meth) 按一下以切換來源

為層級 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
new(program_name = 'ruby', facility = nil) 按一下以切換來源

填入變數以與 記錄器 相容。如果這是 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() 按一下以切換來源

傳回在建立第一個實例時初始化的內部 Syslog 物件。

# File ext/syslog/lib/syslog/logger.rb, line 93
def self.syslog
  @@syslog
end
syslog=(syslog) 按一下以切換來源

指定要使用的內部 Syslog 物件。

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

公開實例方法

add(severity, message = nil, progname = nil, &block) 按一下以切換來源

幾乎重複 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
debug() 按一下以切換來源

在 debug(syslog debug)記錄層級記錄 message,或記錄區塊傳回的訊息。

# File ext/syslog/lib/syslog/logger.rb, line 151
  
error() 按一下以切換來源

在 error(syslog warning)記錄層級記錄 message,或記錄區塊傳回的訊息。

# File ext/syslog/lib/syslog/logger.rb, line 133
  
fatal() 按一下以切換來源

在 fatal(syslog err)記錄層級記錄 message,或記錄區塊傳回的訊息。

# File ext/syslog/lib/syslog/logger.rb, line 127
  
info() 按一下以切換來源

在 info(syslog info)記錄層級記錄 message,或記錄區塊傳回的訊息。

# File ext/syslog/lib/syslog/logger.rb, line 145
  
unknown() 按一下以切換來源

在 unknown(syslog alert)記錄層級記錄 message,或記錄區塊傳回的訊息。

# File ext/syslog/lib/syslog/logger.rb, line 121
  
warn() 按一下以切換來源

在 warn(syslog notice)記錄層級記錄 message,或記錄區塊傳回的訊息。

# File ext/syslog/lib/syslog/logger.rb, line 139