腾讯 Xlog 上手指南
文章目录
- 关于Xlog
- 下载及编译
- 使用
- 初始化
- 混淆
- 查看
- DIY
关于Xlog
https://github.com/Tencent/mars
访问 mars 仓库,将代码压缩包下载到本地.下载的过程中可以初步了解 mars 是何方神圣 : https://github.com/Tencent/mars/wiki
以及 Xlog 的性能和基准 : https://github.com/Tencent/mars/wiki/Xlog-Benchmark
下载及编译
打开下载完毕的 mars-master 文件,打开 mars-master\mars\libraries ,双击执行 build_android.py 脚本
Enter menu:
根据提示命令窗口输入选项 3 ,选择编译xlog
- 3.build xlog shared lib with crypt
Enter the architecture which would like to build:
选择应用使用的cpu架构
- 1.armeabi
编译成功后会再 mars-master\mars\libraries\mars_xlog_sdk\libs 目录下生成对应的 so 文件夹.
使用
so 建议以文件形式直接导入到项目中,当然也可以使用依赖方式。
(不过只含armeabi-v7,项目可能会导致 couldn’t find "libstlport_shared.so ,没有对应的 so 架构)
dependencies {compile 'com.tencent.mars:mars-xlog:1.0.7'
}
初始化
推荐在 程序启动时加载 xlog:
System.loadLibrary("c++_shared");
System.loadLibrary("marsxlog");
在程序启动加载 xlog 后紧接着初始化 xlog:
final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
final String logPath = SDCARD + "/marssample/log";// this is necessary, or may cash for SIGBUS
final String cachePath = this.getFilesDir() + "/xlog"//init xlog
if (BuildConfig.DEBUG) {Xlog.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cachePath, logPath, "MarsSample", PUB_KEY);Xlog.setConsoleLogOpen(true);} else {Xlog.appenderOpen(Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cachePath, logPath, "MarsSample", PUB_KEY);Xlog.setConsoleLogOpen(false);
}Log.setLogImp(new Xlog());
在 程序退出时反初始化:
Log.appenderClose();
使用方式 :
import com.tencent.mars.xlog.Log;Log.e(tag, msg);
混淆
-keep class com.tencent.mars.** {public protected private *;
}
需要注意:
- 如果你的程序使用了多进程,不要把多个进程的日志输出到同一个文件中,保证每个进程独享一个日志文件。
- 保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。
- debug 版本下建议把控制台日志打开,日志级别设为 Verbose 或者 Debug, release 版本建议把控制台日志关闭,日志级别使用 Info.
- cachePath这个参数必传,而且要data下的私有文件目录,例如 /data/data/packagename/files/xlog, mmap文件会放在这个目录,如果传空串,可能会发生 SIGBUS 的crash。
查看
- 使用 adb 命令导出 xlog 文件到桌面
adb pull /storage/emulated/0/Android/data/com.package.xxx/files/xlog C:\Users\admin\Desktop\
- 将 mars-master\mars\log\crypt 文件夹下的 decode_mars_nocrypt_log_file.py 文件拷贝到桌面的 xlog 文件夹中, 如果涉及到加密,拷贝 decode_mars_crypt_log_file.py 文件。执行脚本即可查看日志文件
https://github.com/Tencent/mars/wiki/Xlog-加密使用指引
DIY
每次启动时会删除过期文件,只保留十天内的日志文件(该值定义在appender.cc中的 kMaxLogAliveTime ),所以给 Xlog 的目录请使用单独目录,防止误删其他文件。目前不会根据文件大小进行清理。如若想自定义清理逻辑请自行更改appender.cc中的 __del_timeout_file 函数.
mars-master\mars\log\src\appender.cc
__del_timeout_file()
修改文件自动删除逻辑
appender_open()
方法中可以修改输入的 xlog 文件额外打印的日志,注释掉额外日志打印信息。
// xlog 额外日志打印信息del time out files time: 0
get mmap time: 1
MARS_URL:
MARS_PATH:
MARS_REVISION:
MARS_BUILD_TIME: 2018-01-19 16:21:36
MARS_BUILD_JOB: default
if (buffer.Ptr()) {//__writetips2file("~~~~~ begin of mmap ~~~~~\n");__log2file(buffer.Ptr(), buffer.Length());//__writetips2file("~~~~~ end of mmap ~~~~~%s\n", mark_info);}tickcountdiff_t get_mmap_time = tickcount_t().gettickcount() - tick;char appender_info[728] = {0};snprintf(appender_info, sizeof(appender_info), "^^^^^^^^^^" __DATE__ "^^^" __TIME__ "^^^^^^^^^^%s", mark_info);//xlogger_appender(NULL, appender_info);char logmsg[64] = {0};snprintf(logmsg, sizeof(logmsg), "del time out files time: %" PRIu64, (int64_t)del_timeout_file_time);//xlogger_appender(NULL, logmsg);snprintf(logmsg, sizeof(logmsg), "get mmap time: %" PRIu64, (int64_t)get_mmap_time);//xlogger_appender(NULL, logmsg);//xlogger_appender(NULL, "MARS_URLssssss: " MARS_URL);//xlogger_appender(NULL, "MARS_PATH: " MARS_PATH);//xlogger_appender(NULL, "MARS_REVISION: " MARS_REVISION);//xlogger_appender(NULL, "MARS_BUILD_TIME: " MARS_BUILD_TIME);//xlogger_appender(NULL, "MARS_BUILD_JOB: " MARS_TAG);snprintf(logmsg, sizeof(logmsg), "log appender mode:%d, use mmap:%d", (int)_mode, use_mmap);//xlogger_appender(NULL, logmsg);BOOT_RUN_EXIT(appender_close);
// xlog 调用额外信息[I][2018-02-20 +8.0 12:00:00.001][12345, 1*][com.example.MainActivity][, , 0][number 100
打开 mars-master\mars\log\jniJava2C_Xlog.cc 文件,修改 DEFINE_FIND_STATIC_METHOD()
方法
将
xlogger_Write(&xlog_info, NULL == log_cstr ? "NULL == log" : log_cstr);改为
xlogger_Write(NULL,log_cstr);
腾讯 Xlog 上手指南相关推荐
- android xlog崩溃日志,腾讯Xlog接入指南与踩过的坑
一 为什么要接入日志打印系统? 相信大家在开发应用的时候,总会遇到bug,这个时候,如果bug是在我们本地开发的过程中发现的,那么我们把手机插入android studio进行联调,就可以马上定位到出 ...
- android组件浮动在activity上_Jetpack Hilt 依赖注入框架上手指南
code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:LvKang-insist 链接:https://juejin.im/post/5efdff9d6fb9a07e ...
- Go Pro 半小时上手指南
Jack刚买了台Go Pro 6,商品包装内没有说明书,希望尽快拍那种慢动作或者酷炫的照片,去网上看了些贴都是注重结果,很少讲具体设置或技巧,光靠自己研究什么时候才能入门?<Go Pro 半小时 ...
- 英雄探长的机器人怎么拼_LOL路人局都畏惧的辅助英雄,新版机器人布里兹上手指南...
最近国服版本更新到9.9对这个所谓的机器人做了不小的改动,算是一波不错的加强,在此推出一篇上手指南,希望能帮助大家上分. 版本更新如下: 解析:坦度下滑,伤害提升,大招被动机制不在干扰我方ADC补刀, ...
- 「最简单」的 Core Data 上手指南
本文讲的是「最简单」的 Core Data 上手指南, 原文地址:The Easiest Core Data 原文作者:Alberto De Bortoli 译文出自:掘金翻译计划 译者:Zheaol ...
- 分布式作业 Elastic-Job 快速上手指南
转载自 分布式作业 Elastic-Job 快速上手指南 Elastic-Job支持 JAVA API 和 Spring 配置两种方式配置任务,这里我们使用 JAVA API 的形式来创建一个简单的任 ...
- TortoiseGit + GitHub 快速上手指南
TortoiseGit + GitHub 快速上手指南 名词解释: 1. TortoiseGit 是 TortoiseSVN的Git版,它很好的实现了与windows资源管理器的融合,使用界面与Tor ...
- raptor累乘流程图_Markdown快速上手指南
Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...
- 最新课程 | openGauss 快速上手指南课程即将开课
点击蓝字|关注我们 2020 年 7 月 1 日,openGauss 数据库源代码正式开放,并成立了 openGauss 开源社区.恩墨学院与 openGauss 开源社区达成合作,为了推动社区技术生 ...
最新文章
- Sharding-eth
- java beans 组件_如何利用JavaBeans在应用程序中创建组件?
- python第三方库安装-python的第三方库安装
- struct 与class 的区别?
- windows8专业版安装sql2012
- CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)
- SAP CRM和Cloud for Customer里客户主数据的层级维护
- 第二章 信息的表示和处理
- 双时隙的工作原理_提高频点利用 海能达双时隙功能效率高
- 测试平台的发展与未来趋势
- BNU 鸣人的查克拉
- 《6色荧光笔学习法》——从如何做笔记到高效学习和“战略性思考”
- 中国联通 光猫 吉比特 G-140W-UG 管理员 账号密码
- Faster RCNN 网络分析及维度分析
- 微型计算机是嵌入式吗,什么是嵌入式计算机
- java实例分析宠物商店_Java实现宠物商店管理
- @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“
- 使用win7自带的备份还原、创建系统镜像
- 《AngularJS深度剖析与最佳实践》一2.12 单元测试
- [WriteUp]unctf-web-fuzz_md5
热门文章
- POJ 1474 Video Surveillance(半平面交)
- 使用Python完成公司名称和地址的模糊匹配
- 这个让马化腾嫉妒了8年的日本公司,靠表情包卖了582亿!
- Git清理过大的git目录objects文件
- 卷毛机器人符文_卷毛S6娜美辅助天赋 娜美辅助符文天赋S6最新
- layui导入功能实现(太特么难了,网上全是坑啊)
- 在 ZBrush 和 Maya 中创建 Chris Hemsworth 的 3D 肖像
- php爬虫post,一起来掌握PHP爬虫(基础篇)
- SOLIDWORKS PDM如何进行库压缩
- llvm中的XXXInstrInfo.td