前言
這是iOS日志搜集系列的第一篇文章。在這個(gè)系列中,我會從Crash收集,日志收集,日志反饋,用戶操作收集等方面對iOS日志搜集做一個(gè)全面的介紹,手把手教你搭建一個(gè)iOS日志搜集系統(tǒng)。
關(guān)于xlog
xlog是騰訊mars下的高可靠性高性能的運(yùn)行期日志組件。它的幾個(gè)特點(diǎn)讓我選擇它來作為寫日志,壓縮日志的工具:
- 穩(wěn)定:引入mmap來保證高性能和高可靠性。
- 壓縮:使用流式壓縮,減少日志文件體積。
- 安全性:
xlog的使用
xlog的基本使用方法,我們可以參考官方的wiki。在打包的framework中,我們可以參考appender.h以及xloggerbase.h這兩個(gè)頭文件進(jìn)行操作。
appender.h
// 打開日志文件,準(zhǔn)備寫入
void appender_open(TAppenderMode _mode, const char* _dir, const char* _nameprefix, const char* _pub_key);
void appender_open_with_cache(TAppenderMode _mode, const std::string& _cachedir, const std::string& _logdir, const char* _nameprefix, const char* _pub_key);
// 將日志緩存寫入日志文件
void appender_flush();
void appender_flush_sync();
// 關(guān)閉日志文件
void appender_close();
// 設(shè)置日志模式
void appender_setmode(TAppenderMode _mode);
// 獲取文件路徑
bool appender_getfilepath_from_timespan(int _timespan, const char* _prefix, std::vector<std::string>& _filepath_vec);
// 設(shè)置寫入文件名字
bool appender_make_logfile_name(int _timespan, const char* _prefix, std::vector<std::string>& _filepath_vec);
// 獲取當(dāng)前日志文件相關(guān)信息
bool appender_get_current_log_path(char* _log_path, unsigned int _len);
bool appender_get_current_log_cache_path(char* _logPath, unsigned int _len);
xloggerbase.h
// 打印日志
void xlogger_VPrint(const XLoggerInfo* _info, const char* _format, va_list _list);
void xlogger_Print(const XLoggerInfo* _info, const char* _format, ...);
// 寫日志
void xlogger_Write(const XLoggerInfo* _info, const char* _log);
void xlogger_Wirte(const char* _log);
xlog的改進(jìn)
- xlog中可以設(shè)置日志文件的大小,但是日志在10天后就會過期并被刪除。在很多時(shí)候,如果我們需要獲取更長時(shí)間之前的日志,就需要進(jìn)行修改。
- xlog的后綴名默認(rèn)為xlog,我在這里對它進(jìn)行修改,我們可以自定義后綴名,防止被人獲取。
- 此外我對xlog進(jìn)行簡單的再封裝,一行代碼進(jìn)行配置,使用宏進(jìn)行寫日志。
更多內(nèi)容可以參考我的Github: https://github.com/kingandyoga/xlog-iOS