檢視原始碼 logger_disk_log_h (kernel v10.2)
一個基於 disk_log 的 Logger 處理器
這是一個 Logger 的處理器,它使用 disk_log
提供循環(包裹式)日誌。多個此處理器的實例可以被添加到 Logger 中,每個實例都會將日誌輸出到其自己的磁碟日誌檔案,該檔案的名稱和設定是在處理器配置中指定的。
預設的標準處理器 logger_std_h
可以在核心應用程式啟動時被 disk_log 處理器替換。請參考下面的範例。
此處理器具有過載保護機制,可以在高日誌事件負載期間保持處理器程序和核心應用程式的存活。關於過載保護如何運作,以及如何配置它,請參考 使用者指南
中的說明。
要新增 disk_log 處理器的新實例,請使用 logger:add_handler/3
。處理器配置參數是一個 Map,它可以包含一般配置參數,如 使用者指南
中所記載的,以及處理器特定的參數。特定的資料儲存在一個子 Map 中,其鍵值為 config
,並且可以包含以下參數:
file
- 這是一個磁碟日誌檔案的完整名稱。此選項對應於dlog_option()
資料類型中的name
屬性。此值在新增處理器時設定,並且在執行時無法更改。
預設為與處理器識別碼相同的名稱,位於當前目錄中。
type
- 這是磁碟日誌類型,wrap
或halt
。此選項對應於dlog_option()
資料類型中的type
屬性。此值在新增處理器時設定,並且在執行時無法更改。
預設為
wrap
。max_no_files
- 這是 disk_log 用於循環日誌記錄的最大檔案數量。此選項對應於dlog_option()
資料類型中size
屬性的MaxNoFiles
元素。此值在新增處理器時設定,並且在執行時無法更改。
預設為
10
。此設定對 halt 日誌沒有影響。
max_no_bytes
- 這是日誌檔案寫入的最大位元組數,之後 disk_log 會依序處理下一個檔案,或者在 halt 日誌滿的情況下產生錯誤。此選項對應於dlog_option()
資料類型中size
屬性的MaxNoBytes
元素。此值在新增處理器時設定,並且在執行時無法更改。
對於 wrap 日誌,預設為
1048576
個位元組,對於 halt 日誌,預設為infinity
。filesync_repeat_interval
- 此值以毫秒為單位,指定處理器執行 disk_log 同步操作以將緩衝資料寫入磁碟的頻率。處理器會重複嘗試此操作,但僅在實際有日誌記錄時才會執行新的同步。預設為
5000
毫秒。如果將
no_repeat
設為值,則會停用重複同步操作。使用者也可以呼叫filesync/1
函數來執行 disk_log 同步。
存在其他配置參數,可用於自訂過載保護行為。標準處理器和 disk_log 處理器都使用相同的參數,並且記錄在 使用者指南
中。
請注意,在執行時更改處理器的配置時,不得修改 disk_log 選項(file
、type
、max_no_files
、max_no_bytes
)。
新增 disk_log 處理器的範例
logger:add_handler(my_disk_log_h, logger_disk_log_h,
#{config => #{file => "./my_disk_log",
type => wrap,
max_no_files => 4,
max_no_bytes => 10000,
filesync_repeat_interval => 1000}}).
要在啟動 Erlang 節點時使用 disk_log 處理器而不是預設的標準處理器,請變更核心預設的記錄器以使用 logger_disk_log_h
。範例
erl -kernel logger '[{handler,default,logger_disk_log_h,
#{config => #{file => "./system_disk_log"}}}]'
參見
摘要
函數
將緩衝資料寫入磁碟。