一个功能强大的日志工具类

日志可谓是开发中必不可少的工具了, 但是一般的日志信息难以满足我们的需要,特别是对于大一点的复杂的项目,日志太多,经常导致我们定位不到打印日志的位置.因此我们希望打印的日志能告诉我们日志是在哪里打印的,哪个类,哪个方法,哪一行? 更进一步,最好我点击日志就能跳转到源码处,那就更好啦.

同时,对于一些模块很多的大型app,bug偶尔出现的情况, 有时要修复bug通常要联系整个模块的上下文信息才能找到, 这时我们可以将同一个模块的TAG设置为一样的,最好能将相关日志写入本地,以便测试提出bug的时候我们可以直接去手机里查看日志即可.最终效果图如下:

可以看到有具体的线程信息,类信息,方法信息,以及源码位置,并且点击链接将跳转到源码处,同时,json已经格式化了,看着很方便.

下面说说怎么实现.

那怎么获取类名方法名,行数呢?这时就需要用到StackTraceElement类了,我们知道,在方法执行时,线程会将该方法压入栈,因此可以通过线程获取相应的栈帧元素,来取得方法的调用信息.

如下图所示:

可以看到,线程的调用轨迹,我们可以利用这个获取到方法被调用对应的StackTraceElement.

StackTraceElement LogElement = Thread.currentThread().getStackTrace()[4];//这里去index为4是与具体方法调用深度有关String fullClassName = LogElement.getClassName();String threadName = Thread.currentThread().getName();String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);String methodName = LogElement.getMethodName();String fileName = LogElement.getFileName();int lineNumber = LogElement.getLineNumber();

再然后,组装这些日志信息:
StringBuffer buffer = new StringBuffer();buffer.append("at ");//链接到源码buffer.append("[");buffer.append(threadName);buffer.append(":");buffer.append(className);buffer.append(".");buffer.append(methodName);buffer.append("(");buffer.append(fileName);buffer.append(":");buffer.append(lineNumber);buffer.append(")");buffer.append("] ");buffer.append(log);

同时,我们可以通过buffer.append("at ")来链接到源码位置.

最后,通过分析json字符串的规律,我们通过代码对其进行格式化输出,方便查看; 以可以将日志写入本地文件方便查看.

最后放一下GitHub,欢迎star.

Github:https://github.com/wytiger/MyLog

时间: 2024-11-05 14:39:28

一个功能强大的日志工具类的相关文章

配置简单功能强大的excel工具类搞定excel导入导出工具类(一)

对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 请看一下这个类都有哪些功能:????? 1.实体属性配置了注解就能导出到excel中,每个属性都对应一列.????? 2.列名称可以通过注解配置.????? 3.导出到哪一列可以通过注解配置.????? 4.鼠标移动到该列时提示信息可以通过注解配置.????? 5.用注解设置只能下拉选择不能随意填写功能.???? ? 6.用注解设置

Swifter.Json -- 在 .Net 平台上的一个功能强大,简单易用,稳定又不失高性能的 JSON 序列化和反序列化工具。

Swifter.Json Github Wiki 在 .Net 平台上的一个功能强大,简单易用,稳定又不失高性能的 JSON 序列化和反序列化工具. Swifter.Json 已经经过了大量测试和线上项目中运行许久来确保它的稳定性. 特性 1: 支持 .Net 上绝大多是的数据类型,且轻松扩展:包括但不限于:实体,字典,集合,迭代器,数据读取器和表格. 2: 支持 .Net 我已知的大多数平台,包括但不限于:.Net Framework 2.0+, .Net Core 2.0+, .Net St

WebLech是一个功能强大的Web站点下载与镜像工具

WebLech是一个功能强大的Web站点下载与镜像工具.它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为.WebLech有一个功能控制台并采用多线程操作. http://sourceforge.net/projects/weblech/files/WebLech/weblech-0.0.3/weblech-0.0.3.tar.gz/download?use_mirror=nchc&download=

安卓开发技巧二:自定义日志工具类XLog的实现

我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项目,用到打印日志的地方肯定特别多,等到真正上线的时候,我们是不希望日志依旧能够打印出的,原因很简单,不仅多少有些影响效率,更有可能导致信息的泄露,所以我们就需要把所有的日志打印语句全部取消掉,难道我们真的一个一个的去删除这些打印日志的语句吗?项目那么大,就是想删除,也得耗费大量的时间和精力!大家不用怕,笔者这就给大家带来一款控制线上版本和线下版本

Android LogUtils打印日志工具类

LogUtils打印日志工具类 这是一个从XUtils3中摘抄出来的打印日志工具类.这个类打印日志比较详细,可以打印类名.方法名.isDebug为打印日志开关,初始化的时候可以使用LogUtils.isDebug(boolean b)来控制开关状态. public class LogUtils { public static String customTagPrefix = "x_log"; private static boolean isDebug = true; private

UIViewAdditions(一个很方便使用的工具类吧)

我们在工程中,或多或少的要修改控件的坐标-宽度-高度,于是,经常性的见到大家self.view.frame.origin.x,self.view.frame.size.width.........相当的麻烦,在这里向大家推荐一个比较好的工具类,是UIView的类目,它里面对于求坐标,求高度什么的做了封装,很方便大家调用. @下载链接:点击这里 @.h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interfa

Android开发调试日志工具类[支持保存到SD卡]

直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.net.UnknownHostException; import java.text.SimpleDateFormat; impor

SuperSwipeRefreshLayout 一个功能强大的自定义下拉刷新组件

SuperSwipeRefreshLayout 一个功能强大的自定义下拉刷新组件. Why? 下拉刷新这种控件,想必大家用的太多了,比如使用很多的XListView等.最近,项目中很多列表都是使用ReyclerView实现的,代替了原有的ListView,原有下拉刷新方式遭到挑战.本来Google推出的SwipeRefreshLayout已经能够满足大部分的需求了.然而,由于其定制性较差,下拉刷新的样式无法修改,而且被嵌套的View也无法跟随手指的滑动而滑动.基于以上考虑,定制自己强大的Supe

XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软

XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软件站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了.它可以在Windows.Linux.Solaris.Mac OS X 等多种操作系统下安装使用,支持多语言:英文.简体中文.繁体中文.韩文.俄文.日文等. http://baike.baidu.com/view/864591.htm?fr=aladdin