日志收集之xlog

前言

这是iOS日志搜集系列的第一篇文章。在这个系列中,我会从Crash收集,日志收集,日志反馈,用户操作收集等方面对iOS日志搜集做一个全面的介绍,手把手教你搭建一个iOS日志搜集系统。

关于xlog

xlog是腾讯mars下的高可靠性高性能的运行期日志组件。它的几个特点让我选择它来作为写日志,压缩日志的工具:

  • 稳定:引入mmap来保证高性能和高可靠性。
  • 压缩:使用流式压缩,减少日志文件体积。
  • 安全性:

xlog的使用

xlog的基本使用方法,我们可以参考官方的wiki。在打包的framework中,我们可以参考appender.h以及xloggerbase.h这两个头文件进行操作。

appender.h
// 打开日志文件,准备写入
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();

// 关闭日志文件
void appender_close();

// 设置日志模式
void appender_setmode(TAppenderMode _mode);

// 获取文件路径
bool appender_getfilepath_from_timespan(int _timespan, const char* _prefix, std::vector<std::string>& _filepath_vec);

// 设置写入文件名字
bool appender_make_logfile_name(int _timespan, const char* _prefix, std::vector<std::string>& _filepath_vec);

// 获取当前日志文件相关信息
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的改进

  1. xlog中可以设置日志文件的大小,但是日志在10天后就会过期并被删除。在很多时候,如果我们需要获取更长时间之前的日志,就需要进行修改。
  2. xlog的后缀名默认为xlog,我在这里对它进行修改,我们可以自定义后缀名,防止被人获取。
  3. 此外我对xlog进行简单的再封装,一行代码进行配置,使用宏进行写日志。

更多内容可以参考我的Github: https://github.com/kingandyoga/xlog-iOS

推荐阅读更多精彩内容