Android开源日志框架xlog
版权声明:本文为xing_star原创文章,转载请注明出处!
本文同步自http://javaexception.com/archives/144
xlog的优点
在开发过程中,避免不了要使用日志组件,用来记录程序执行过程中一些关键节点的日志,出了问题,我们可以根据日志信息,快速定位问题。
对了本文所说的xlog不是指的微信mars下的xlog日志。本文中的xlog是国人开发的一个开源日志框架,github上的地址是 https://github.com/elvishew/XLog
它的优点包括,用法简单,日志格式美观,日志输出可以显示所在类的行数,可以扩展Android和java的日志库,可以在多个通道打印日志,如console,File,Logcat等等。除了这些外,他支持打印各种对象或是自定义对象。包括数组,xml,json数据。日志信息包含线程信息,调用栈信息(堆栈信息,方法名,文件名,行号等等)。还支持保存日志文件,日志备份等。对开发者而言相当友好,用法也很简单。
xlog的用法
先添加依赖
implementation 'com.elvishew:xlog:1.6.1'
接着在Application中初始化
XLog.init(BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE);
这是最简单的配置,如果想要添加一些自定义的操作,比如在release下采集日志到文件中,在debug下都显示日志可以这样配置
LogConfiguration config = new LogConfiguration.Builder()
.logLevel(BuildConfig.DEBUG ? LogLevel.ALL // Specify log level, logs below this level won't be printed, default: LogLevel.ALL
: LogLevel.ALL)
.tag("MY_TAG") // Specify TAG, default: "X-LOG"
.t() // Enable thread info, disabled by default
.st(2) // Enable stack trace info with depth 2, disabled by default
.b() // Enable border, disabled by default
// .jsonFormatter(new MyJsonFormatter()) // Default: DefaultJsonFormatter
// .xmlFormatter(new MyXmlFormatter()) // Default: DefaultXmlFormatter
// .throwableFormatter(new MyThrowableFormatter()) // Default: DefaultThrowableFormatter
// .threadFormatter(new MyThreadFormatter()) // Default: DefaultThreadFormatter
// .stackTraceFormatter(new MyStackTraceFormatter()) // Default: DefaultStackTraceFormatter
// .borderFormatter(new MyBoardFormatter()) // Default: DefaultBorderFormatter
// .addObjectFormatter(AnyClass.class, // Add formatter for specific class of object
// new AnyClassObjectFormatter()) // Use Object.toString() by default
// .addInterceptor(new BlacklistTagsFilterInterceptor( // Add blacklist tags filter
// "blacklist1", "blacklist2", "blacklist3"))
// .addInterceptor(new MyInterceptor()) // Add a log interceptor
.build(); String xlogPath = getFilesDir().getAbsolutePath();
Printer androidPrinter = new AndroidPrinter(); // Printer that print the log using android.util.Log
// Printer consolePrinter = new ConsolePrinter(); // Printer that print the log to console using System.out
Printer filePrinter = new FilePrinter // Printer that print the log to the file system
.Builder(xlogPath) // Specify the path to save log file
// .fileNameGenerator(new ChangelessFileNameGenerator("log")) // Default: ChangelessFileNameGenerator("log")
.backupStrategy(new NeverBackupStrategy()) // Default: FileSizeBackupStrategy(1024 * 1024)
// .cleanStrategy(new FileLastModifiedCleanStrategy(MAX_TIME)) // Default: NeverCleanStrategy()
// .flattener(new MyFlattener()) // Default: DefaultFlattener
.build(); if (BuildConfig.DEBUG) {
XLog.init( // Initialize XLog
config, // Specify the log configuration, if not specified, will use new LogConfiguration.Builder().build()
androidPrinter, // Specify printers, if no printer is specified, AndroidPrinter(for Android)/ConsolePrinter(for java) will be used.
// consolePrinter,
filePrinter);
} else {
XLog.init( // Initialize XLog
config, // Specify the log configuration, if not specified, will use new LogConfiguration.Builder().build()
// androidPrinter, // Specify printers, if no printer is specified, AndroidPrinter(for Android)/ConsolePrinter(for java) will be used.
// consolePrinter,
filePrinter);
}
预览效果
集成成功后,我们在项目中运行下,看看效果如何,如下图所示。分别是Logcat下的格式化的日志(显示日志堆栈信息,线程名称,类名,方法名,行号等),日志文件中的日志信息


使用xlog后,日志文件可以收集到所有的日志信息,方便了定位问题,格式化的日志,线程名,堆栈信息,对开发者也是相当友好的。
在最近的一个app中,添加了一个日志上传功能,就是将xlog收集到的日志文件,上传给开发者,这个功能对于开发者定位一些用户反馈的问题很有用处,下一篇我将分享下是如何实现日志上传功能的。
参考资料
如果想深入了解源码设计的话,可以看这篇文章, android开源日志框架解析 https://www.jianshu.com/p/d039fb0484f0
xlog项目地址 https://github.com/elvishew/XLog
Android开源日志框架xlog的更多相关文章
- android开源项目框架大全:
android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式 ...
- Exceptionless - .Net Core开源日志框架
Exceptionless - .Net Core开源日志框架 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/11020140 ...
- Net Core开源日志框架
Net Core开源日志框架 Exceptionless - .Net Core开源日志框架 作者:markjiang7m2原文地址:https://www.cnblogs.com/markjiang ...
- Android开源测试框架学习
近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...
- [转]Android开源测试框架学习
近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...
- WMRouter:美团外卖Android开源路由框架
WMRouter是一款Android路由框架,基于组件化的设计思路,功能灵活,使用也比较简单. WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题,之后逐步推广到了美团其他App ...
- 开源日志框架Exceptionless使用教程
Exceptionless是一款日志记录框架,它开源.免费.提供管理界面.易于安装和使用.ExceptionLess底层采用ElasticSearch作为日志存储,提供了快速.丰富的查询API,方便我 ...
- Android 开源动画框架:NineOldAndroids
介绍 Android 平台提供两种动画系统:Property Animation(Android 3.0引入)和View Animation.这两种动画都可供选择,但是Property Animati ...
- Android开源日志库Logger的使用
https://blog.csdn.net/Power_Qyh/article/details/78159598?locationNum=2&fps=1 https://github.com/ ...
随机推荐
- C#中类的修饰符
Q&A 项目=程序集=assembly 1,Q:类的修饰符有哪些? A: 有 new.public.protect.internal.private.abstract.sealed.st ...
- PostgreSQL 中字段类型varchar
PostgreSql数据库中varchar类型与sql server中字段用法有差别,PostgreSql中如果字段设置为varchar类型长度为10,则无论存字母.数字或其它符号,长度最大为10个, ...
- ES6-对象赋值,key值得构建,is()方法对比对象,assign()合并对象
ES6对象赋值: // es5 let name = "ananiah"; let skill ='web'; let obj = {name:name,skill:skill}; ...
- dedecmsV5.7 arclist 如何调用副栏目的文章
问题:用arclist 调用某个栏目下的文章的时候,发现无法调用出副栏目是这个栏目的文章. 然后就上百度搜了一番,记录一下我搜到的解决方法: 1.打开/include/taglib/arclist.l ...
- 检测到无法识别的AP,请升级AP数据库
0x00 事件 原因是公司新增了两个 AP 设备 TL-AP1202i ,似乎是新的 AP 硬件版本比较高,导致 AC 无法识别,控制器 Web 页面给出 检测到无法识别的AP,请升级AP数据库! 的 ...
- layui 动态设置 checbox 选中状态
layui复选框checkbox选中赋值,解决layui设置checbox选中不生效的问题 直接上代码 //监听指定开关 form.on('switch(dongsir)', function(dat ...
- [Linux] 获取出日志中的邮箱shell
需求是把所有的日志中邮箱获取出来,根据指定关键字过滤,邮箱的格式是\txxx@xxx\t的格式,日志的存放是按照日期作为目录 #!/bin/bash logBasePath="/data1/ ...
- 2-3 远程管理命令-SSH工作方式简介
03.远程登录和复制文件 序号 命令 对应英文 作用 01 ssh 用户名@ip secure shell 关机/重启 02 scp 用户名@ip:用户名或路径 用户名@ip:文件名或路径 secur ...
- WinFrom和WebFrom的区别
原文链接:https://blog.csdn.net/sloder/article/details/6145169 一是Winform的定位机制没有Webform丰富,web里有table,div(浮 ...
- 201871010113-刘兴瑞《面向对象程序设计(java)》第十六周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...