android 自定义库,Android自定义Log库

背景

我们在开发的时候肯定会打一些Log,特别是在调试代码或者bug的时候,我们都会打一些Log日志来记录,但是当我们发布正式版本的时候,尼玛,要一行一行的去掉,这就尴尬了。

ef509328a466?nomobile=yes

懵逼状态

励志封装Log库

本来想使用github上的Logger库的,但是感觉有点烦中,后面看到了鸿洋大师写过一篇关于Log库的文章 Android反观Log库后面我也是根据这个来简单的修改的

自定义内容

增加变量来区分debug模式还是release模式,在release的情况下将所有的Log日志都去掉。

利用StackTraceElement来输出我们的Log的位置,便于我们定位和寻找日志。

实现

我们以i的log来作为例子:

/**

* iiiiiiiiiiiiii

* @param content

*/

public static void i(String content){

i(null,content);

}

public static void i(String tag,String content){

if (!sDebug) return;

printer.i(getFinalTag(tag),content);

}

其中的isDebug是我们的标识位,我们可以把它在初始化的时候来与编译类型绑定起来。

其中Printer类是实现了打印Log日志功能的输出类:

public class LogPrint implements Printer{

@Override

public void d(String message, String str) {

new DebugLogText(message).setup(str);

}

@Override

public void e(String message, String str) {

new ErrorLogText(message).setup(str);

}

@Override

public void e(String message, String str,Throwable throwable) {

new ErrorLogText(message).setup(str+throwable.getMessage());

}

@Override

public void w(String message, String str) {

new WarnLogText(message).setup(str);

}

@Override

public void i(String message, String str) {

new InfoLogText(message).setup(str);

}

@Override

public void v(String message, String str) {

new VerboseLogText(message).setup(str);

}

@Override

public void wtf(String message, Object... args) {

}

@Override

public void json(String message, String json) {

new InfoLogText(message).setup(json);

}

@Override

public void xml(String xml) {

}

@Override

public void clear() {

}

}

具体的输出类型是由对应的Log类型来产生,我们来看一个类InfoLogText:

public class InfoLogText extends LogText {

public InfoLogText(String tag) {

super(tag);

}

@Override

protected void setUpHeader() {

Log.i(mTag, SINGLE_DIVIDER);

}

@Override

protected void setUpFooter() {

Log.i(mTag, DOUBLE_DIVIDER);

}

@Override

protected void setUpContent(String content) {

StackTraceElement targetStackTraceElement = getTargetStackTraceElement();

Log.i(mTag, "(" + targetStackTraceElement.getFileName() + ":"

+ targetStackTraceElement.getLineNumber() + ")");

Log.i(mTag, content);

}

}

总结

我们可以看到,它实际调用的是系统的Log的日志方法,当然拼接了,对应的Log日志的类和行数,具体的原理我们可以查看上面提到的鸿洋的文章。

好了,我么大家来看一下最后的日志效果

11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: ********************************************

11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: (MainActivity.java:30)

11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: is a test

11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: ════════════════════════════════════════════

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 处理输入输出错误

处理输入输出时,我们必须预计到其中可能发生的错误并给出相应的处理措施。 当我们输入时,可能会由于人的失误(错误理解了指令、打字错误等)、文件格式不符、错误估计了情况等原因造成读取失败。当我们输出时,如果输出设…

各种语言的 Hello World

学习编程的小伙伴们可能会发现,不敢我们学习哪种语言,我们的第一个程序都是Hello World!,所以我们非常有必要清楚的知道Hello World!使用每一种编程语言的写法。 使用C语言实现Hello World! #includeint main(void){printf("Hello Wor…

Android拦截浏览器广告,浏览器拦截广告的几种方法

悬浮闪动的弹窗广告和牛皮癣一样铺满全屏的低质广告,极大地破坏了浏览网页的体验。通过启用浏览器自带的广告拦截功能,或为浏览器安装广告拦截插件,能够还原网页原本的清爽真容。浏览器自带-安卓广告拦截操作说明口碑比较好的 Via、夸克和 X浏…

android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)

需求现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库。方案创建Android Studio Library Project创建Project时,记得添加"Include C Sup…

C++ 四种类型转换运算符

隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。 但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有…

Android leak内存,GitHub - jin870132/memoryleakdemo: 安卓内存泄露几种常见形式及解决方案...

安卓内存泄露几种常见形式及解决方案一.前言1.内存溢出与内存泄露内存溢出(oom),是指程序在申请内存时,没有足够的内存空间供其使用,出现oom;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄…

第二批鸿蒙手机排行,鸿蒙系统第二批升级机型有哪些 鸿蒙系统第二批升级机型名单一览...

华为6月2日召开开启鸿蒙发布会,很多华为手机的用户都想第一时间用上鸿蒙手机系统,今天就给大家带来鸿蒙系统第二批升级机型名单一览,一起来看看吧鸿蒙系统第二批升级机型名单一览具体机型:HUAWEI Mate20 SeriesHUAWEl nova 8 Seri…

VC2010 项目的创建

在VC2010中创建一个项目 1 . 创建新项目。打开我们的VC2010,点工具栏第一个按钮(New Project),或者菜单 File -> New -> Project…,或者按快捷键 CtrlShiftN,几种方式都可以。 2 . 在 “New Project…

html5教学案例撰写,怎样撰写教育教学案例

怎样撰写教育教学案例教学是教师的教和学生的学所组成的一种人类特有的人才培养活动。那么,怎样撰写教育教学案例呢?下面是小编收集整理的撰写教育教学案例的相关内容,希望对您有所帮助!1.撰写教育教学案例的思想准备要写好教育、教学案例,首…

error C2143: syntax error : missing ';' before '}'

我们在运行C程序的时候经常会遇到错误&#xff0c;如果你遇到了这个错误&#xff1a;error C2143: syntax error : missing ‘;’ before ‘}’&#xff0c;那麽我将帮你解决这个错误。 错误展示 完整代码 #include <stdio.h> #define exchange(a,b){int t; ta;ab;bt} …

VC2010运行C程序时黑框一闪就没

黑框一闪就没如何解决的呢&#xff1f; 首先我们要知道为什么黑框一闪就没 闪一下是因为它执行完输出函数(printf)后直接返回系统了。 解决办法 在程序里加一个system(“pause”)&#xff0c;这个是调用系统函数&#xff0c;到时候会显示"按任意键退出"。 使用方…

厦门大学计算机科学与技术学院考研分数线,2020年厦门大学计算机科学与技术考研经验分享...

原标题&#xff1a;2020年厦门大学计算机科学与技术考研经验分享大家好&#xff0c;我是育明考研小赵老师关于2020年厦门大学计算机科学与技术考研信息汇总&#xff0c;请参考一、院校介绍厦门大学(Xiamen University)&#xff0c;简称厦大(XMU)&#xff0c;是中华人民共和国教…

Redis ops详解

Redis缓存数据库的ops问题 我们使用Java操作Redis数据库的时候&#xff0c;往往会输出和ops相关的内容&#xff0c;下面给大家讲解一下ops相关的内容。 ops是什么&#xff1f; redis中的OPS 即operation per second 每秒操作次数。意味着每秒对Redis的持久化操作。 所以我们…

Redis的6种数据类型

Redis 是一种基于内存的数据库&#xff0c;并且提供一定的持久化功能&#xff0c;它是一种键值&#xff08;key-value&#xff09;数据库&#xff0c;使用 key 作为索引找到当前缓存的数据&#xff0c;并且返回给程序调用者。 当前的 Redis 支持 6 种数据类型&#xff0c;它们…

Redis字符串深入

字符串是 Redis 最基本的数据结构&#xff0c;它将以一个键和一个值存储于 Redis 内部&#xff0c;它犹如 Java 的 Map 结构&#xff0c;让 Redis 通过键去找到值。Redis 字符串的数据结构如下图所示。 Redis 会通过 key 去找到对应的字符串&#xff0c;比如通过 key1 找到 v…

Redis哈希数详解

Redis 中哈希结构就如同 Java 的 map 一样&#xff0c;一个对象里面有许多键值对&#xff0c;它是特别适合存储对象的&#xff0c;如果内存足够大&#xff0c;那么一个 Redis 的 hash 结构可以存储 2 的 32 次方减 1 个键值对&#xff08;40 多亿&#xff09;。 一般而言&…

Redis链表结构深入

链表结构是 Redis 中一个常用的结构&#xff0c;它可以存储多个字符串&#xff0c;而且它是有序的&#xff0c;能够存储 2 的 32 次方减 1 个节点&#xff08;超过 40 亿个节点&#xff09;。 Redis 链表是双向的&#xff0c;因此即可以从左到右&#xff0c;也可以从右到左遍历…

家用使用计算机组装,不能再简单了!家用电脑DIY组装实操

【天极网DIY硬件频道】【天极网硬件频道】近期有网友对DIY组装电脑比较感兴趣&#xff0c;因为自从智能手机和平板电脑横行霸道之后&#xff0c;家中的PC电脑被使用的时间变少了许多&#xff0c;可是偶尔有工作需求或是别有任务等&#xff0c;所以大家依然是不会让电脑远离的。…

Redis集合深入

Redis 的集合不是一个线性结构&#xff0c;而是一个哈希表结构&#xff0c;它的内部会根据 hash 分子来存储和查找数据&#xff0c;理论上一个集合可以存储 2 的 32 次方减 1 个节点&#xff08;大约 42 亿&#xff09;个元素&#xff0c;因为采用哈希表结构&#xff0c;所以对…

Redis有序集合详解

有序集合和集合类似&#xff0c;只是说它是有序的&#xff0c;和无序集合的主要区别在于每一个元素除了值之外&#xff0c;它还会多一个分数。分数是一个浮点数&#xff0c;在 Java 中是使用双精度表示的&#xff0c;根据分数&#xff0c;Redis 就可以支持对分数从小到大或者从…