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.
⼤致意思是说这是⼀个可以在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");