檢視原始碼 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 - 這是磁碟日誌類型,wraphalt。此選項對應於 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 選項(filetypemax_no_filesmax_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"}}}]'

參見

logger, logger_std_h, disk_log

摘要

函數

將緩衝資料寫入磁碟。

函數

連結到此函數

filesync(名稱)

檢視原始碼 (自 OTP 21.0 起)
-spec filesync(Name) -> ok | {error, Reason}
                  when Name :: atom(), Reason :: handler_busy | {badarg, term()}.

將緩衝資料寫入磁碟。