12.7 給計算增加日誌記錄
日誌通常可以使用全域性可變狀態實現。然而,如果我們想要避免使用全域性可變狀態,並保持程式的純函式性,那又該如何呢?我們有乙個選擇,就是把日誌記錄器的狀態作為額外的引數值,傳遞我們要呼叫的每個函式。實現可能非常困難(想象一下,如果我們決定將另乙個引數新增到這個狀態中!)。
要解決這個問題,我們可以建立自定義計算型別,啟用了日誌記錄,把日誌記錄器的狀態隱藏在計算型別內。這類似於在無任何***的純函式式語言中, haskell 使用的技術,嵌入處理狀態(比如,檔案系統)。我們要實現的示例依賴於這樣的事實,可以把任何標準的 f# **段包含在計算表示式塊中。因此,這個示例使用 c# 是不可行的。我們會首先設計需要的計算型別(單子型別),進行簡單的日誌記錄。
12 7 給計算增加日誌記錄
12.7 給計算增加日誌記錄 日誌通常可以使用全域性可變狀態實現。然而,如果我們想要避免使用全域性可變狀態,並保持程式的純函式性,又會如何呢?我們會有乙個選擇,就是把日誌記錄器的狀態作為額外的引數值,傳遞我們要呼叫的每個函式。實現可能非常困難 想象一下,如果我們決定將另乙個引數新增到這個狀態中!要解...
linux增加日誌記錄IP操作功能
主要功能 記錄 具體ip在具體某時間登入系統 操作的每一條操作命令記錄。who var log wtmp編輯環境變數檔案 etc profile檔案 vim etc profile 行尾增加如下內容 history export histtimeformat y.m.d h m s user ip ...
12 7 1 建立日誌記錄的計算
12.7.1 建立日誌記錄的計算 這個計算將產生乙個值,並能夠將訊息寫入到本地日誌記錄的緩衝區。這意味著,計算的結果將是乙個值,和包含這些訊息的字串列表。再次,我們還是使用有乙個識別器的差別聯合,表示這個型別 type logging t 這個生成器的實現展示在清單 12.23 中。最有趣的是,bi...