背景

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

懵逼状态

励志封装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: ════════════════════════════════════════════

android 自定义库,Android自定义Log库相关推荐

  1. logger(三):其他log库的介绍(glog的用法)

    Glog等一些log库 在写代码的过程中,打log肯定是少不了的,毕竟不能总靠调试来发现问题.我们可以试着使用自己写一些log库,也可以使用现成的log库,成熟的log库非常多,log4cpp.log ...

  2. android ndk 文件管理,Android NDK 入门与实践

    NDK 是什么 NDK 全称 Native Development Kit,可以让您在 Android 应用中调用 C 或 C++ 代码的工具. NDK 好处 1.NDK 可以生成 .so 文件, 方 ...

  3. android 自定义banner,Android项目 引入Banner开源库(轮播图)

    Banner开源库是什么? Banner 是 Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义. 怎么使用 Banner 开源库? 1.在项目\a ...

  4. 自定义封装android语音播报库

    自定义封装android语音播报库 在开发的时候,需要用到语音播报和音乐提醒,然后就封装了一套库,只需要调用一个方法,传入需要的文字或者音乐,方便快捷 首先在project视图下,将aar文件添加到l ...

  5. android 字体编程,Android编程之Calligraphy:Android 自定义字体库

    Calligraphy是android 自定义字体库 添加依赖 Download from Maven Central (.jar) OR Java dependencies { compile 'u ...

  6. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译

     1  编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...

  7. android fragment中引入自定义view_厉害了,用Android自定义View实现八大行星绕太阳3D旋转效果...

    作者:史蒂芬诺夫斯基 链接:https://www.jianshu.com/p/2954f2ef8ea5 好久没写View了,最近恰巧遇到一个八大行星绕太阳旋转的假3D效果,写完之后感觉效果还不错.能 ...

  8. android 多线程封装,Android线程池封装库

    目录介绍 1.遇到的问题和需求 1.1 遇到的问题有哪些 1.2 遇到的需求 1.3 多线程通过实现Runnable弊端 1.4 为什么要用线程池 2.封装库具有的功能 2.1 常用的功能 3.封装库 ...

  9. Android 主题换肤的开源库

    Android 主题换肤的开源库(插件化换肤) 新增夜间模式的简洁实现方式,不需要再去单独创建一个皮肤包(目前处于beta版本) 夜间模式实现方式 前提条件还是每个使用到的资源必须是引用的,不能是具体 ...

最新文章

  1. Android 进程保活招式大全
  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符
  3. 滴滴魅族手机人脸识别没有反应_手机UI颜值排名榜单,小米MIUI排到第九,魅族没有上榜...
  4. 兔子生崽问题编程_贵阳在哪里可以学到好的少儿编程
  5. jfreechart 时序图 ,生成图表
  6. 通信人,请不要吝啬举手之劳
  7. VMware workstation 创建共享盘
  8. Onew积极开拓国际市场,为全球用户提供全方位金融服务
  9. React脚手架案例
  10. 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
  11. java 定时任务哪个好_java目前常用的几种定时任务
  12. 服务器电源控制芯片,服务器电源中的PFC控制芯片HA16141的应用.pdf
  13. 世界3大IT服务品牌之一塔塔咨询服务公司发布新品牌宣言
  14. 密码学09(SM3算法)
  15. linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测
  16. WIN7家庭版升级到旗舰版操作
  17. 三国演义中的十大谎言 VS 程序员十大口头禅
  18. 《转》Vmware vSphere常见问题汇总
  19. 把oracle数据导入redis,Oracle向redis数据迁移
  20. element-ui el-table 表格渲染错位以及高度计算错误问题

热门文章

  1. php 谷歌翻译api_武汉武昌区地质勘测翻译公司-译嘉合翻译
  2. Android多线程优劣,Android 开发中用到的几个多线程解析
  3. 腾讯视频视频下载_如何下载腾讯视频
  4. Arrays.asList()和Collections.singletonList()比较
  5. Spring boot自定义启动字符画(banner)
  6. kettle 先删除后插入_Kettle:使用触发器和快照表进行增量数据同步
  7. 消息订阅与发布(pubsub)
  8. python自然语言处理库_Python 自然语言处理(NLP)工具库汇总
  9. dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)
  10. android闹钟延时,android闹钟定时启动延时或者直接不启动