版权声明:本文为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的用法

先添加依赖

  1. implementation 'com.elvishew:xlog:1.6.1'

接着在Application中初始化

  1. XLog.init(BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE);

这是最简单的配置,如果想要添加一些自定义的操作,比如在release下采集日志到文件中,在debug下都显示日志可以这样配置

  1. LogConfiguration config = new LogConfiguration.Builder()
  2. .logLevel(BuildConfig.DEBUG ? LogLevel.ALL // Specify log level, logs below this level won't be printed, default: LogLevel.ALL
  3. : LogLevel.ALL)
  4. .tag("MY_TAG") // Specify TAG, default: "X-LOG"
  5. .t() // Enable thread info, disabled by default
  6. .st(2) // Enable stack trace info with depth 2, disabled by default
  7. .b() // Enable border, disabled by default
  8. // .jsonFormatter(new MyJsonFormatter()) // Default: DefaultJsonFormatter
  9. // .xmlFormatter(new MyXmlFormatter()) // Default: DefaultXmlFormatter
  10. // .throwableFormatter(new MyThrowableFormatter()) // Default: DefaultThrowableFormatter
  11. // .threadFormatter(new MyThreadFormatter()) // Default: DefaultThreadFormatter
  12. // .stackTraceFormatter(new MyStackTraceFormatter()) // Default: DefaultStackTraceFormatter
  13. // .borderFormatter(new MyBoardFormatter()) // Default: DefaultBorderFormatter
  14. // .addObjectFormatter(AnyClass.class, // Add formatter for specific class of object
  15. // new AnyClassObjectFormatter()) // Use Object.toString() by default
  16. // .addInterceptor(new BlacklistTagsFilterInterceptor( // Add blacklist tags filter
  17. // "blacklist1", "blacklist2", "blacklist3"))
  18. // .addInterceptor(new MyInterceptor()) // Add a log interceptor
  19. .build();
  20.  
  21. String xlogPath = getFilesDir().getAbsolutePath();
  22. Printer androidPrinter = new AndroidPrinter(); // Printer that print the log using android.util.Log
  23. // Printer consolePrinter = new ConsolePrinter(); // Printer that print the log to console using System.out
  24. Printer filePrinter = new FilePrinter // Printer that print the log to the file system
  25. .Builder(xlogPath) // Specify the path to save log file
  26. // .fileNameGenerator(new ChangelessFileNameGenerator("log")) // Default: ChangelessFileNameGenerator("log")
  27. .backupStrategy(new NeverBackupStrategy()) // Default: FileSizeBackupStrategy(1024 * 1024)
  28. // .cleanStrategy(new FileLastModifiedCleanStrategy(MAX_TIME)) // Default: NeverCleanStrategy()
  29. // .flattener(new MyFlattener()) // Default: DefaultFlattener
  30. .build();
  31.  
  32. if (BuildConfig.DEBUG) {
  33. XLog.init( // Initialize XLog
  34. config, // Specify the log configuration, if not specified, will use new LogConfiguration.Builder().build()
  35. androidPrinter, // Specify printers, if no printer is specified, AndroidPrinter(for Android)/ConsolePrinter(for java) will be used.
  36. // consolePrinter,
  37. filePrinter);
  38. } else {
  39. XLog.init( // Initialize XLog
  40. config, // Specify the log configuration, if not specified, will use new LogConfiguration.Builder().build()
  41. // androidPrinter, // Specify printers, if no printer is specified, AndroidPrinter(for Android)/ConsolePrinter(for java) will be used.
  42. // consolePrinter,
  43. filePrinter);
  44. }

预览效果

集成成功后,我们在项目中运行下,看看效果如何,如下图所示。分别是Logcat下的格式化的日志(显示日志堆栈信息,线程名称,类名,方法名,行号等),日志文件中的日志信息

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

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

参考资料

如果想深入了解源码设计的话,可以看这篇文章, android开源日志框架解析 https://www.jianshu.com/p/d039fb0484f0

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

Android开源日志框架xlog的更多相关文章

  1. android开源项目框架大全:

    android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式 ...

  2. Exceptionless - .Net Core开源日志框架

    Exceptionless - .Net Core开源日志框架 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/11020140 ...

  3. Net Core开源日志框架

    Net Core开源日志框架 Exceptionless - .Net Core开源日志框架 作者:markjiang7m2原文地址:https://www.cnblogs.com/markjiang ...

  4. Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

  5. [转]Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

  6. WMRouter:美团外卖Android开源路由框架

    WMRouter是一款Android路由框架,基于组件化的设计思路,功能灵活,使用也比较简单. WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题,之后逐步推广到了美团其他App ...

  7. 开源日志框架Exceptionless使用教程

    Exceptionless是一款日志记录框架,它开源.免费.提供管理界面.易于安装和使用.ExceptionLess底层采用ElasticSearch作为日志存储,提供了快速.丰富的查询API,方便我 ...

  8. Android 开源动画框架:NineOldAndroids

    介绍 Android 平台提供两种动画系统:Property Animation(Android 3.0引入)和View Animation.这两种动画都可供选择,但是Property Animati ...

  9. Android开源日志库Logger的使用

    https://blog.csdn.net/Power_Qyh/article/details/78159598?locationNum=2&fps=1 https://github.com/ ...

随机推荐

  1. VMware虚拟机安装centos7

    镜像下载地址:http://www.linuxdown.net/ 在vmware上开始安装CentOS系统,点击菜单新建虚拟机,进入如下图步骤进行操作.   接着进行自定义硬盘操作   最后虚拟机就创 ...

  2. HTML元素分类 块级元素 内联元素 块级内联元素

    概述 HTML中存在许多元素,如<h1>,<p>,<a>,<block>,<image>,这些元素可分为三类,依次是块级元素,内联元素,块级 ...

  3. Doxygen程序注释转换说明文档

    Doxygen使用 https://www.jianshu.com/p/9464eca6aefe

  4. Linux下使用 github+hexo 搭建个人博客05-next主题接入评论系统

    静态站点拥有一定的局限性,因此我们需要借助于第三方服务来扩展我们站点的功能. 而评论系统是最常用于和网站用户交流的,因此本章讲解在 next 主题,如何接入评论系统. 参考网站:Next 使用文档,第 ...

  5. maven配置本地和远程仓库

    maven项目中我们不用挨个导入jar包,那这些Jar包从哪里来呢?当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库 ...

  6. 初识Kotlin之函数

    本章通过介绍Kotlin的基本函数,默认参数函数,参数不定长函数,尾递归函数,高阶函数,Lamdba表达式.来对Kotlin函数做进一步了解.将上一篇的Kotlin变量的知识得以运用.Kotlin变量 ...

  7. EF中嵌套类的where查询

    有一个订单类:Order,在订单Order类中有一个子类,订单详细类OrderDetail. 需求:根据订单详细类的字段过滤数据 public class Order { public string ...

  8. 大数据量数据库设计与优化方案(SQL优化)

    转自:http://blog.sina.com.cn/s/blog_6c0541d50102wxen.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的 ...

  9. http返回头中content-length与Transfer-Encoding: chunked的问题释疑

    先说说问题出现的背景:        公司服务器与手机客户端交互,客户端请求一个动态生成的XML文件,在用firebug查看http响应头的时候,有时候发现有content-length属性,有时候没 ...

  10. (day59)十一、CSRF、Auth模块、impotlib模块、settings源码

    目录 一.模拟实现中间件的编程思想 (一)impotlib模块 (二)实现功能的配置使用 二.跨站请求伪造CSRF (一)由来 (二)form表单的CSRF (三)ajax中的CSRF (1)通过da ...