欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开源日志框架xlog

程序员文章站 2024-01-27 10:03:34
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/144 xlog的优点 在开发过程中,避免不了要使用日志组件,用来记录程序执行过程中一些关键节点的日志,出了问题,我们可以根据日志信息,快速定位问题。 对了本文 ......

版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自

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下的格式化的日志(显示日志堆栈信息,线程名称,类名,方法名,行号等),日志文件中的日志信息

Android开源日志框架xlog

 

Android开源日志框架xlog

 

使用xlog后,日志文件可以收集到所有的日志信息,方便了定位问题,格式化的日志,线程名,堆栈信息,对开发者也是相当友好的。

在最近的一个app中,添加了一个日志上传功能,就是将xlog收集到的日志文件,上传给开发者,这个功能对于开发者定位一些用户反馈的问题很有用处,下一篇我将分享下是如何实现日志上传功能的。

参考资料

如果想深入了解源码设计的话,可以看这篇文章, android开源日志框架解析 

xlog项目地址 https://github.com/elvishew/xlog