是這樣的,大概10天前,我忽然就想造個輪子,這個輪子的主要作用是收集客戶端的日誌,通過服務端存儲到指定的持久化介質中。客戶端和服務端都可以通過簡單的配置實現快速接入 ...
想法出現
是這樣的,大概10天前,我忽然就想造個輪子,這個輪子的主要作用是收集客戶端的日誌,通過服務端存儲到指定的持久化介質中。客戶端和服務端都可以通過簡單的配置實現快速接入。然後我就畫了一個圖,就是下麵這樣的。
開局一張圖,實現全靠編
這張圖很粗糙,但是足夠表達了我的想法,我甚至和馬桶以及Kent說,能一行代碼搞定的事情,不要搞複雜了,思路非常簡單,就是提供一個客戶端端,通過配置傳輸通道(Redis/RabbitMQ),就可以把日誌提交到伺服器。
使用隊列的方式傳輸數據,是出於削峰和解耦的目的,更重要的是,一旦任意語言的客戶端實現了傳輸協議,那麼他們完全可以利用自己熟悉的語言的優勢去接入 TomatoLog,抱歉,我覺得這個名字還不錯的。
至於服務端,通過插件式實現日誌存儲,如果對現有的存儲介質不滿意,那麼可以擴展自己的持久層,只需要實現 ILogWriter 介面,然後將開發好的庫放到 Plugins 中即可,服務的還提供輸入、過濾、報警等必要的功能;報警功能非常重要,必須提供至少兩種警報通知方式,初步定義為:SMS/Email.
然後就出現了下麵這張圖
通過比較這兩張圖可以看出,系統架構內部有不少的變化,特別是服務端方便,在易用性和可擴展性方面增加了不少東西。特別重要的是,真的實現了通過一行代碼將客戶端引入到項目中使用的目的,通過這幾天的不懈努力,我得到了下麵這個通知
結束語
今天寫這篇隨筆真的是心血來潮,好消息是,TomaToLog 已經實現並提交到了 GitHub,本文只是預告一下,接下來會有更詳細的接入使用文檔,我只能說,這也許是目前為止 .NETCore 平臺上最簡單易用的日誌工具。
大晚上的發文,正好沒人看,偷偷發。