類別 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 參數用於指定記錄訊息的程式類型。
與 記錄器
相容的記錄層級。
公開類別方法
為層級 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
填入變數以與 記錄器
相容。如果這是 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
在 debug(syslog debug)記錄層級記錄 message
,或記錄區塊傳回的訊息。
# File ext/syslog/lib/syslog/logger.rb, line 151
在 error(syslog warning)記錄層級記錄 message
,或記錄區塊傳回的訊息。
# File ext/syslog/lib/syslog/logger.rb, line 133
在 fatal(syslog err)記錄層級記錄 message
,或記錄區塊傳回的訊息。
# File ext/syslog/lib/syslog/logger.rb, line 127
在 info(syslog info)記錄層級記錄 message
,或記錄區塊傳回的訊息。
# File ext/syslog/lib/syslog/logger.rb, line 145
在 unknown(syslog alert)記錄層級記錄 message
,或記錄區塊傳回的訊息。
# File ext/syslog/lib/syslog/logger.rb, line 121
在 warn(syslog notice)記錄層級記錄 message
,或記錄區塊傳回的訊息。
# File ext/syslog/lib/syslog/logger.rb, line 139