精華 騰訊宣布開源 其高性能日志系統(tǒng) BqLog
騰訊宣布開源 BqLog,一個源于《Honor Of Kings》(王者榮耀國際服)的,輕量級、跨平臺、高性能的日志組件。由 C++ 實現(xiàn),同時支持 Java,C# 的調(diào)用。可以用于 Unreal、Unity 等游戲引擎,也能用于 Android、IOS 環(huán)境下的 App。在 Windows、Mac、Linux 等的桌面和服務(wù)器環(huán)境也能夠很好運行。
主要特點
高并發(fā),高性能
現(xiàn)在業(yè)界有很多開源日志組件,不管是 Java,C++ 還是其他語言實現(xiàn),通過實測,性能最高的還是 Log4j2,當(dāng)其運行于異步模式下的時候,對比其他日志組件有巨大的性能優(yōu)勢。而 BqLog 同樣運行在異步模式下的時候,比 Log4j 有 5 倍以上的性能提升(見 Github 內(nèi)的 README 和 benchmark)。同時在 Java 和 C# 環(huán)境下使用的時候,可以做到無 GC。
低內(nèi)存
由于 BqLog 源自手機游戲,所以必須適應(yīng)嚴(yán)苛的內(nèi)存使用限制。整個組件本身的內(nèi)存消耗只在 1M 左右。
高壓縮比
BqLog 推出了一種自有知識產(chǎn)權(quán)的日志壓縮格式,在日常環(huán)境中,最后生成的日志不僅尺寸只有文本格式的 20% 到 30% 左右,其寫入性能還超出普通格式很多。(見 Github 內(nèi)的 README 和 benchmark)
防數(shù)據(jù)丟失
異步日志最大的問題是當(dāng)程序發(fā)生異常結(jié)束的時候,內(nèi)存里的數(shù)據(jù)還沒來得及寫入日志文件,BqLog 提供了多種解決方案用于避免數(shù)據(jù)丟失。
高泛用性
BqLog 提供動態(tài)庫,靜態(tài)庫,源代碼等多種導(dǎo)入方式,本身代碼除了 stdlibc 之外,沒有任何依賴。所以可以在 Android NDK 的 ANDROID_STL=none 的嚴(yán)格模式下通過編譯。
可擴展
BqLog 提供自定義 adapter 支持,可以用于適配各種不同的數(shù)據(jù)類型,本身已經(jīng)默認提供了針對 Unreal 引擎常用數(shù)據(jù)類型的支持。