日志收集之xlog
2017-12-10 本文已影响511人
kingandyoga
前言
这是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的改进
- xlog中可以设置日志文件的大小,但是日志在10天后就会过期并被删除。在很多时候,如果我们需要获取更长时间之前的日志,就需要进行修改。
- xlog的后缀名默认为xlog,我在这里对它进行修改,我们可以自定义后缀名,防止被人获取。
- 此外我对xlog进行简单的再封装,一行代码进行配置,使用宏进行写日志。
更多内容可以参考我的Github: https://github.com/kingandyoga/xlog-iOS