文章目录

  • 关于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。

查看

  1. 使用 adb 命令导出 xlog 文件到桌面

adb pull /storage/emulated/0/Android/data/com.package.xxx/files/xlog C:\Users\admin\Desktop\

  1. 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 上手指南相关推荐

  1. android xlog崩溃日志,腾讯Xlog接入指南与踩过的坑

    一 为什么要接入日志打印系统? 相信大家在开发应用的时候,总会遇到bug,这个时候,如果bug是在我们本地开发的过程中发现的,那么我们把手机插入android studio进行联调,就可以马上定位到出 ...

  2. android组件浮动在activity上_Jetpack Hilt 依赖注入框架上手指南

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:LvKang-insist 链接:https://juejin.im/post/5efdff9d6fb9a07e ...

  3. Go Pro 半小时上手指南

    Jack刚买了台Go Pro 6,商品包装内没有说明书,希望尽快拍那种慢动作或者酷炫的照片,去网上看了些贴都是注重结果,很少讲具体设置或技巧,光靠自己研究什么时候才能入门?<Go Pro 半小时 ...

  4. 英雄探长的机器人怎么拼_LOL路人局都畏惧的辅助英雄,新版机器人布里兹上手指南...

    最近国服版本更新到9.9对这个所谓的机器人做了不小的改动,算是一波不错的加强,在此推出一篇上手指南,希望能帮助大家上分. 版本更新如下: 解析:坦度下滑,伤害提升,大招被动机制不在干扰我方ADC补刀, ...

  5. 「最简单」的 Core Data 上手指南

    本文讲的是「最简单」的 Core Data 上手指南, 原文地址:The Easiest Core Data 原文作者:Alberto De Bortoli 译文出自:掘金翻译计划 译者:Zheaol ...

  6. 分布式作业 Elastic-Job 快速上手指南

    转载自 分布式作业 Elastic-Job 快速上手指南 Elastic-Job支持 JAVA API 和 Spring 配置两种方式配置任务,这里我们使用 JAVA API 的形式来创建一个简单的任 ...

  7. TortoiseGit + GitHub 快速上手指南

    TortoiseGit + GitHub 快速上手指南 名词解释: 1. TortoiseGit 是 TortoiseSVN的Git版,它很好的实现了与windows资源管理器的融合,使用界面与Tor ...

  8. raptor累乘流程图_Markdown快速上手指南

    Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...

  9. 最新课程 | openGauss 快速上手指南课程即将开课

    点击蓝字|关注我们 2020 年 7 月 1 日,openGauss 数据库源代码正式开放,并成立了 openGauss 开源社区.恩墨学院与 openGauss 开源社区达成合作,为了推动社区技术生 ...

最新文章

  1. Sharding-eth
  2. java beans 组件_如何利用JavaBeans在应用程序中创建组件?
  3. python第三方库安装-python的第三方库安装
  4. struct 与class 的区别?
  5. windows8专业版安装sql2012
  6. CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)
  7. SAP CRM和Cloud for Customer里客户主数据的层级维护
  8. 第二章 信息的表示和处理
  9. 双时隙的工作原理_提高频点利用 海能达双时隙功能效率高
  10. 测试平台的发展与未来趋势
  11. BNU 鸣人的查克拉
  12. 《6色荧光笔学习法》——从如何做笔记到高效学习和“战略性思考”
  13. 中国联通 光猫 吉比特 G-140W-UG 管理员 账号密码
  14. Faster RCNN 网络分析及维度分析
  15. 微型计算机是嵌入式吗,什么是嵌入式计算机
  16. java实例分析宠物商店_Java实现宠物商店管理
  17. @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“
  18. 使用win7自带的备份还原、创建系统镜像
  19. 《AngularJS深度剖析与最佳实践》一2.12 单元测试
  20. [WriteUp]unctf-web-fuzz_md5

热门文章

  1. POJ 1474 Video Surveillance(半平面交)
  2. 使用Python完成公司名称和地址的模糊匹配
  3. 这个让马化腾嫉妒了8年的日本公司,靠表情包卖了582亿!
  4. Git清理过大的git目录objects文件
  5. 卷毛机器人符文_卷毛S6娜美辅助天赋 娜美辅助符文天赋S6最新
  6. layui导入功能实现(太特么难了,网上全是坑啊)
  7. 在 ZBrush 和 Maya 中创建 Chris Hemsworth 的 3D 肖像
  8. php爬虫post,一起来掌握PHP爬虫(基础篇)
  9. SOLIDWORKS PDM如何进行库压缩
  10. llvm中的XXXInstrInfo.td