Log日志打印工具类

本文介绍了如何创建一个自定义的Log工具类,满足在Android开发中快速定位代码位置、自动控制日志开关、美化日志输出等需求。通过使用StackTraceElement,实现了点击日志跳转到源代码的功能。同时,该工具类支持打印JSON数据,自动设置TAG,并提供了线程信息。需要注意的是,在使用BuildConfig.DEBUG时,要确保导入的是当前Module的包,以避免DEBUG值始终为false。
摘要由CSDN通过智能技术生成

Log日志打印工具类

转载需注明出处http://blog.csdn.net/fight_0513/article/details/77098225

概述

  • android的日志信息打印为我们开发过程中提供了许多帮助,不过系统的log还不够完美,例如不能快速定位代码位置,每次都要考虑设置怎样的Tag,还不美观,超长字符串打印不全(log单条打印长度限制4*1024字符长度),不能一眼就找到自己打印的信息……
  • 网上已经有许多优秀的LOG框架 但是个人觉得有些臃肿,所以想自己动手写个方便的Log工具

个人需求

  • 能定位(点击日志跳转到具体代码位置)
  • 自动的日志打印开关(发布release版本时自动关闭日志打印)
  • 美观(带边宽,可控制)
  • 可以打印JSon数据,保证信息完整
  • 不需要手动设置TAG
  • 支持传入Objec
  • 在手动设置TAG的情况下支持输入多个参数
  • 提供线程信息

不支持打印到文件,不支持打印XML


执行效果

这里写图片描述

功能提要 >>代码定位

日志工具类的技术含量还是比较低的值得一提的只有快速定位代码位置的功能,这里涉及一个 StackTraceElement 类 就是堆栈信息;通过这个类可以获取当前堆栈信息,例如当前运行的线程,文件名,方法名,类名和代码所在行数……

        //获取堆栈信息
        // 这里的数组的index=5是根据你工具类的层级做不同的定义,遍历之后就知道啦
        StackTraceElement[] targetElement = Thread.currentThread().getStackTrace();
        String fileName = targetElement[5].getFileName();
        String className = targetElement[5].getClassName();
        int lineNum = targetElement[5].getLineNumber();
        String methName = targetElement[5].getMethodName();

        Log.e("TAG", "processContents: >>>" + fileName);
        Log.e("TAG", "processContents: >>>" + className);
        Log.e("TAG", "processContents: >>>" + methName);
        Log.e("TAG", "processContents: >>>" + lineNum);

        //严格按(FileName:LineNuber)的格式来写 才可以定位
        Log.e("TAG", "processContents: >>>" + "(" + fileName + ":" + lineNum + ")");

打印结果
这里写图片描述

注意

调用 BuildConfig 导包时一定要导入 当前 Module 的包,导入其他包 BuildConfig.DEBUG的值将会一直为false

原因:BuildConfig.java 是编译时自动生成的,并且每个 Module 都会生成一份,以该 Module 的 packageName 为 BuildConfig.java 的 packageName。所以如果你的应用有多个 Module或者有其他三方依赖 就会有多个 BuildConfig.java 生成,而上面的 Lib Module import 的是自己的 BuildConfig.java,编译时被依赖的 Module 默认会提供 Release 版给其他 Module 或工程使用,这就导致该 BuildConfig.DEBUG 会始终为 false。

完整代码 >>代码下载

代码注释比较详细 如有疑问欢迎留言

public final class mLogUtils {
   

    private mLogUtils
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mylog 是一个多线程安全、高效、易用性很强的 C/C 库 .只需要一个初始化日志目录以及文件名,你就可以像使用 printf 一样的去打印日志。通过日志可以定位(多线程)请求 ip, logid,执行时间等。 1 说明 1) 本文件夹包含源码src以及示例文件sample 2) 编译src生成output(包括iånclude和lib) 3) 使用output的lib和include,具体可以查看sample的Makefile和code 4) 日志级别为FATAL, WARNING, NOTICE, TRACE, DEBUG,以此级别变低 5) 使用MY_LOG_FATAL等打印日志,和printf使用方式类似,非常简单。 2 使用API(查看mylog.h) 1) 初始化日志目录 my_log_init(const char* log_path, const char* normal_path, const char* warn_fatal_path, const int log_level) log_path : log路径 normal_path : 正常日志目录 warn_fatal_path : 异常日志目录 log_level : 日志级别 2) 初始化线程日志数据 my_log_thread_init() 多线程使用 3) 设置一个线程的logid my_log_set_logid(logid) 必须在my_log_thread_init() 之后使用。 4) 设置一个线程的reqip  my_log_set_reqip(reqip) 必须在my_log_thread_init() 之后使用. 5) 设置一个线程的reqip my_log_set_mod(mod) 设置一个线程的reqip, 必须在单线程中使用或者my_log_thread_init() 之后使用. 6)设置计算执行时间的类型(打印时间是ms还是us) my_log_set_time_type(time_type) 必须在单线程中使用或者my_log_thread_init() 之后使用. 7) 打印FATAL日志 MY_LOG_FATAL(logfmt, arg...) 日记级别 >=1会打印 FATAL日志。 8)打印WARNNING日志 MY_LOG_WARNING(logfmt, arg...) 日记级别 >=2会打印 WARNING日志。 9) 打印NOTICE日志 MY_LOG_NOTICE(logfmt, arg...) 日记级别 >=4会打印 NOTICE日志。 10)打印TRACE日志 MY_LOG_TRACE(logfmt, arg...) 日记级别 >=8会打印TRACE日志。 11) 打印DEBUG日志 MY_LOG_DEBUG(logfmt, arg...) 标签:mylog 分享 window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": [], "bdPic": "", "bdStyle": "1", "bdSize": "24" }, "share": {} }; with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' ~(-new Date() / 36e5)];\r\n \r\n \r\n \r\n \r\n \u8f6f\u4ef6\u9996\u9875\r\n \u8f6f\u4ef6\u4e0b\u8f7d\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nwindow.changyan.api.config({\r\nappid: 'cysXjLKDf', conf: 'prod_33c27aefa42004c9b2c12a759c851039' });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值