首先來聊聊往事吧~~兩年前就職于一家傳統(tǒng)金融軟件公司,為某交易所開發(fā)一套大型交易系統(tǒng),交易標的的價格為流式數(shù)據(jù),采用價格觸發(fā)成交方式,T+0交易制度(類似炒股,只是炒的不是股票而是其他標的物,但可以隨時開平倉)。鑒于系統(tǒng)需要記錄大量價格數(shù)據(jù)、交易信息及訂單流水,且系統(tǒng)對性能要求極高(敏感度達毫秒級),因此需要避免日志服務成為系統(tǒng)性能瓶頸。通過對幾個通用型日志(如log4j、logback)的性能壓測,以及考慮到它們作為通用型日志相對比較臃腫,就決定自個兒寫個日志工具以支撐系統(tǒng)功能和性能所需。當時的做法只是簡單的將日志的實現(xiàn)作為一個 util 類寫在項目中,只有幾百行的代碼量。
系統(tǒng)上線兩個月后日均成交額200億RMB,最高達440億RMB,峰值成交4000筆/秒。系統(tǒng)非常龐大,但幾百行的代碼卻完美支撐住了重要的日志服務!
鑒于其優(yōu)秀的表現(xiàn),就花了一點點時間把它抽取出來作為一個獨立的日志組件,取名叫 FLogger,代碼幾乎沒有改動,現(xiàn)已托管到GitHub(FLogger),有興趣的童鞋可以clone下來了解并改進,目前它的實現(xiàn)是非常簡(純)單(粹)的。
以上就是 FLogger 的誕生背景。好吧,下面進入正題。
特性
雖然 FLogger 只有幾百行的代碼,但是麻雀雖小五臟俱全,它可是擁有非常豐富的特性呢:
雙緩沖隊列
多種刷盤機制,支持時間觸發(fā)、緩存大小觸發(fā)、服務關閉強制觸發(fā)等刷盤方式
多種 RollingFile 機制,支持文件大小觸發(fā)、按天觸發(fā)等 Rolling 方式
多日志級別,支持 debug、info、warn、error和 fatal 等日志級別
熱加載,由日志事件觸發(fā)熱加載
超輕量,不依賴任何第三方庫
性能保證,成功用于日交易