檢視原始碼 logger_std_h (kernel v10.2)
Logger 的標準處理器。
這是 Logger 的標準處理器。可以將此處理器的多個實例添加到 Logger,每個實例會將日誌輸出到 standard_io
、standard_error
或檔案。
此處理器具有過載保護機制,可以在高日誌事件負載期間保持處理器程序和核心應用程式的運作。有關過載保護如何運作以及如何配置的說明,請參閱 使用者指南
。
若要新增標準處理器的新實例,請使用 logger:add_handler/3
。處理器組態引數是一個 map,其中可以包含一般組態參數(如 使用者指南
中所述)和處理器特定的參數。特定的資料會儲存在鍵為 config
的子 map 中,並且可以包含以下參數:
type =
io:standard_io/0
|
io:standard_error/0
| file | {device,
io:device/0
}
- 指定日誌目的地。此值在新增處理器時設定,並且無法在執行時變更。
預設為
standard_io
,除非指定了參數file
,在這種情況下預設為file
。file =
file:filename/0
- 當處理器的類型為file
時,此參數指定日誌檔的名稱。此值在新增處理器時設定,並且無法在執行時變更。
預設為與處理器識別碼相同的名稱,位於目前目錄中。
modes = [
file:mode/0
]
- 此參數指定開啟日誌檔時要使用的檔案模式,請參閱file:open/2
。如果未指定modes
,則使用的預設清單為[raw,append,delayed_write]
。如果指定了modes
,則此清單會取代預設模式清單,並進行以下調整:- 如果清單中找不到
raw
,則會將其加入。 - 如果在清單中找不到
write
、append
或exclusive
中的任何一個,則會加入append
。 - 如果在清單中找不到
delayed_write
或{delayed_write,Size,Delay}
中的任何一個,則會加入delayed_write
。
日誌檔始終以 UTF-8 編碼。無法透過設定模式
{encoding,Encoding}
來變更編碼。此值在新增處理器時設定,並且無法在執行時變更。
預設為
[raw,append,delayed_write]
。- 如果清單中找不到
max_no_bytes =
pos_integer/0
| infinity
- 此參數指定是否應輪替日誌檔。值infinity
表示日誌檔將無限增大,而整數值則指定在達到哪個檔案大小(以位元組為單位)時輪替檔案。預設為
infinity
。max_no_files =
non_neg_integer/0
- 此參數指定要保留的輪替日誌檔封存數量。只有當max_no_bytes
設定為整數值時,此參數才有意義。日誌封存的名稱為
FileName.0
、FileName.1
、...FileName.N
,其中FileName
是目前日誌檔的名稱。FileName.0
是最新的封存。N
的最大值為max_no_files
減 1 的值。請注意,將此值設定為
0
不會關閉輪替。它只是指定不保留任何封存。預設為
0
。compress_on_rotate =
boolean/0
- 此參數指定是否應壓縮輪替的日誌檔封存。如果設定為true
,則所有封存都會使用gzip
壓縮,並重新命名為FileName.N.gz
。如果
max_no_bytes
的值為infinity
,則compress_on_rotate
沒有意義。預設為
false
。file_check =
non_neg_integer/0
- 當logger_std_h
記錄到檔案時,它會在每次寫入操作之前讀取日誌檔的檔案資訊。這是為了確保檔案仍然存在,並且具有與開啟時相同的 inode。這會導致一些效能損失,但可確保在檔案被外部參與者移除或重新命名的情況下,不會遺失任何日誌事件。為了盡量減少效能損失,可以將
file_check
參數設定為正整數值N
。只要自上次讀取以來經過的時間不超過N
毫秒,處理器就會跳過在寫入之前讀取檔案資訊的步驟。請注意,當
file_check
值增大時,遺失日誌事件的風險也會增加。預設為 0。
filesync_repeat_interval =
pos_integer/0
| no_repeat
- 此值以毫秒為單位,指定處理器將緩衝資料寫入磁碟的檔案同步操作頻率。處理器會重複嘗試此操作,但只有在實際記錄了某些內容時才會執行新的同步。如果將
no_repeat
設定為值,則會停用重複的檔案同步操作,並由作業系統設定來決定資料寫入磁碟的速度。使用者也可以呼叫filesync/1
函數來執行檔案同步。預設為
5000
毫秒。
還存在其他組態參數,用於自訂過載保護行為。標準處理器和 disk_log 處理器都使用相同的參數,並記錄在 使用者指南
中。
請注意,如果在執行時變更處理器的組態,則不得修改 type
、file
或 modes
參數。
新增標準處理器的範例
logger:add_handler(my_standard_h, logger_std_h,
#{config => #{file => "./system_info.log",
filesync_repeat_interval => 1000}}).
若要將預設處理器(最初隨核心應用程式啟動)設定為記錄到檔案而不是 standard_io
,請變更核心預設記錄器組態。範例:
erl -kernel logger '[{handler,default,logger_std_h,
#{config => #{file => "./log.log"}}}]'
如何在啟動時將標準處理器取代為 disk_log 處理器的範例,請參閱 logger_disk_log_h
手冊。
另請參閱
摘要
函數
將緩衝資料寫入磁碟。