Android⽇志打印框架xLog超详细使⽤详解 这⾥是考虑到官⽹的说明⽐较简单且是英⽂的,所以才写了这篇博客,推荐给⼤家的同时,也是⽅便以后⾃⼰看。(这⾥demo是⽤Kotlin写的,毕竟是主流,⽤java的同学应该也看得懂!)
⽬录
⼀、简介
先看看官⽹的简介:
Lightweight and pretty, powerful and flexible logger for android and java,
can print the log to Logcat, Console and Files, or anywhere if you like.
mutable是什么意思⼤致意思是说这是⼀个可以在android和java上使⽤对的轻量级⽇志框架,可打印到Logcat和⽂件中!先上⼀个官⽹的效果图吧!
图中可以看出,普通LOG打印就不说了,看看JSON和xml以及集合的打印,它能直接打印出好看的格式,以及线程信息和边框,当然这些都是可以配置的,如果你不喜欢边框你也可以配置不打印边框!⽽且不⽤担⼼字符串过长⽽导致打印不全的问题,过长的话它会⾃动换⾏!
好了,废话不多说,接下来说说怎么⽤吧!
⼆、XLog基本⽤法
1.添加依赖
implementation 'com.elvishew:xlog:1.7.2'
2.初始化
XLog.init(LogLevel.ALL);
建议这段初始化的代码写在你⾃定义的Application中。当然你写在Activity⾥⾯也可以⽤,反正全局只需要初始化⼀次就好了!
3.基本打印
基本的打印原⽣打印⽅式类似。执⾏如下代码
XLog.v("hello xlog");
XLog.d("hello xlog");
XLog.i("hello xlog");
XLog.w("hello xlog");
XLog.e("hello xlog");
控制台打印出来的结果:
4.打印json和xml
⽀持打印json和xml,通过XLog.json和l打印。执⾏如下代码代码:
val jsonObject = JSONObject()
jsonObject.put("name", "张三")
jsonObject.put("age", "21")
jsonObject.put("sex", "⼥")
val xmlString = "<team>" +
"<member name='Elvis'/>" +
"<member name='Leon'/>" +
"</team>";
XLog.String(2))
打印结果:
5.打印集合
⽀持直接打印集合对象。执⾏如下⾏代码:
val list = mutableListOf<String>()
list.add("11111")
list.add("22222")
list.add("33333")
list.add("44444")
list.add("55555")
val map = mutableMapOf<String,String>()
map["name"] = "张三"
map["age"] = "12"
map["sex"] = "男"
XLog.d(list)
XLog.d(map)
打印结果:
6.直接打印Bundle和异常对象
⽀持直接打印Bundle和Exception对象,将主要信息打印出来。执⾏如下代码:
val b = Bundle()
b.putString("name","李四")
b.putInt("age",13)
b.putString("sex","⼥")
XLog.i(b)
try {
1/0
}catch (e:Exception){
XLog.e(e)
}
打印结果:
7.占位符打印
⽀持占位符打印,开发者打印的时候就不⽤⽤多个“+”拼接字符串了。执⾏如下代码:
XLog.d("Hello %s, I am %d", "Elvis", 20)
打印结果
8.直接打印对象
XLog还⽀持直接打印对象,但是他打印的结果是对象调⽤toString()后得到的字符串!⽐如执⾏如下代码:
val stu = Student("王五",15,"男")
XLog.i(stu)
Log.i("TAG",String())
打印结果:
这⾥就会发现,直接打印对象和⽤原⽣的打印对象.toString()的结果是⼀样的!实际上看过源码就知道,打印普通对象的时候他都会调⽤toString()返回的结果打印到控制台。所以这⾥我们把Student重写它的toString⽅法再试⼀次。
Student类代码如下:
class Student(
var name:String,
var age:Int,
var sex:String
) {
override fun toString(): String {
val json = JSONObject()
json.put("name",this.name)
json.put("age",this.age)
json.put("sex",this.sex)
String()
}
}
这⾥重写了toString,返回⼀个包含所以属性的json格式的字符串,在执⾏刚才的代码,打印结果如下:
是吧,所以⼤家这⾥要直接打印普通对象看属性的话,还得重写对象的toString⽅法!这⾥说的普通对象我做个解释,表达的意思就是XLog不能直接格式化对的对象都看作普通对象,json、xml、Bundle和集合之外的对象,⼤概这么个意思,不要太纠结!好了,继续~
怎么样?!上⾯⼏种打印⽅式是不是很nice,已经可以满⾜⽇常的调试需求的,起码⽐⾃带的Log打印要好太多!如果这些已经够⽤了的话,就可以到此为⽌了!
当然XLog的强⼤还不⽌如此,他还⽀持⾃定义属性配置和⾃动⽣成打印⽇志⽂件,接下来说说吧!
三、配置
先看看官⽹的说明:
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.NONE)
.tag("MY_TAG") // Specify TAG, default: "X-LOG" 指定标签,默认:“X-LOG”
.enableThreadInfo() // Enable thread info, disabled by default 启⽤线程信息,默认禁⽤
.enableStackTrace(2) // Enable stack trace info with depth 2, disabled by default 启⽤深度为2的堆栈跟踪信息,默认禁⽤
.enableBorder() // Enable border, disabled by default 启⽤边框,默认禁⽤
.jsonFormatter(new MyJsonFormatter()) // Default: DefaultJsonFormatter 默认值:DefaultJsonFormatter
.xmlFormatter(new MyXmlFormatter()) // Default: DefaultXmlFormatter 默认值:DefaultXmlFormatter
.throwableFormatter(new MyThrowableFormatter()) // Default: DefaultThrowableFormatter 默认值:DefaultThrowableFormatter
.threadFormatter(new MyThreadFormatter()) // Default: DefaultThreadFormatter 默认值:DefaultThreadFormatter
.stackTraceFormatter(new MyStackTraceFormatter()) // Default: DefaultStackTraceFormatter 默认值:DefaultStackTraceFormatter
.borderFormatter(new MyBoardFormatter()) // Default: DefaultBorderFormatter 默认值:DefaultBorderFormatter
.addObjectFormatter(AnyClass.class, // Add formatter for specific class of object 为对象的特定类添加格式化器
new AnyClassObjectFormatter()) // String() by default 默认情况下使⽤String()
.addInterceptor(new BlacklistTagsFilterInterceptor( // Add blacklist tags filter 添加⿊名单标签过滤器
"blacklist1", "blacklist2", "blacklist3"))
.addInterceptor(new MyInterceptor()) // Add other log interceptor 添加其他⽇志
.build();
Printer androidPrinter = new AndroidPrinter(true); // Printer that print the log using android.util.Log 使⽤android.util.Log打印⽇志的打印机
Printer consolePrinter = new ConsolePrinter(); // Printer that print the log to console using System.out 使⽤System.out将⽇志打印到控制台的打印机
Printer filePrinter = new FilePrinter // Printer that print(save) the log to file 打印(保存)⽇志到⽂件的打印机
.Builder("<path-to-logs-dir>") // Specify the directory path of log file(s) 指定⽇志⽂件的⽬录路径
.fileNameGenerator(new DateFileNameGenerator()) // Default: ChangelessFileNameGenerator("log") 默认值:ChangelessFileNameGenerator(“⽇志”)
.backupStrategy(new NeverBackupStrategy()) // Default: FileSizeBackupStrategy(1024 * 1024) 默认:FileSizeBackupStrategy(1024 * 1024)
.
cleanStrategy(new FileLastModifiedCleanStrategy(MAX_TIME)) // Default: NeverCleanStrategy() 默认值:NeverCleanStrategy ()
.flattener(new MyFlattener()) // Default: DefaultFlattener 默认值:DefaultFlattener
.build();
XLog.init( // Initialize XLog 初始化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);
官⽹的⽂档还是⽐较简介的,简单的⼀眼就看得懂,稍微复杂的还得⾃⼰研究,基础不太好的可能就头⼤了!为了照顾下英⽂不太好的
同学,这⾥⽤有道词典翻译了⼀下!这些配置很多就给了个默认值,并没描述起什么作⽤,刚开始使⽤起来还是有点阻碍的。没关系,我现
在来把这些配置⼀个⼀个说清楚,保证⼤家能轻松使⽤!
1、logLevel⽅法,指定⽇志级别
指定⽇志级别,此级别以下的⽇志将不会打印,默认值:LogLevel.ALL,这个很好理解,我们来试⼀下,执⾏以下代码:
//初始化,这⼀段的初始化⽅法全局只⽤执⾏⼀次就够了,我这⾥是为了演⽰看起来⽅便!
val config = LogConfiguration.Builder()
.logLevel(LogLevel.INFO)
.build()
XLog.init(config)
//打印
XLog.v("hello xlog");
XLog.d("hello xlog");
XLog.i("hello xlog");
XLog.w("hello xlog");
XLog.e("hello xlog");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论