android 自定义库,Android自定义Log库
背景
我们在开发的时候肯定会打一些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库相关推荐
- logger(三):其他log库的介绍(glog的用法)
Glog等一些log库 在写代码的过程中,打log肯定是少不了的,毕竟不能总靠调试来发现问题.我们可以试着使用自己写一些log库,也可以使用现成的log库,成熟的log库非常多,log4cpp.log ...
- android ndk 文件管理,Android NDK 入门与实践
NDK 是什么 NDK 全称 Native Development Kit,可以让您在 Android 应用中调用 C 或 C++ 代码的工具. NDK 好处 1.NDK 可以生成 .so 文件, 方 ...
- android 自定义banner,Android项目 引入Banner开源库(轮播图)
Banner开源库是什么? Banner 是 Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义. 怎么使用 Banner 开源库? 1.在项目\a ...
- 自定义封装android语音播报库
自定义封装android语音播报库 在开发的时候,需要用到语音播报和音乐提醒,然后就封装了一套库,只需要调用一个方法,传入需要的文字或者音乐,方便快捷 首先在project视图下,将aar文件添加到l ...
- android 字体编程,Android编程之Calligraphy:Android 自定义字体库
Calligraphy是android 自定义字体库 添加依赖 Download from Maven Central (.jar) OR Java dependencies { compile 'u ...
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
1 编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...
- android fragment中引入自定义view_厉害了,用Android自定义View实现八大行星绕太阳3D旋转效果...
作者:史蒂芬诺夫斯基 链接:https://www.jianshu.com/p/2954f2ef8ea5 好久没写View了,最近恰巧遇到一个八大行星绕太阳旋转的假3D效果,写完之后感觉效果还不错.能 ...
- android 多线程封装,Android线程池封装库
目录介绍 1.遇到的问题和需求 1.1 遇到的问题有哪些 1.2 遇到的需求 1.3 多线程通过实现Runnable弊端 1.4 为什么要用线程池 2.封装库具有的功能 2.1 常用的功能 3.封装库 ...
- Android 主题换肤的开源库
Android 主题换肤的开源库(插件化换肤) 新增夜间模式的简洁实现方式,不需要再去单独创建一个皮肤包(目前处于beta版本) 夜间模式实现方式 前提条件还是每个使用到的资源必须是引用的,不能是具体 ...
最新文章
- Android 进程保活招式大全
- C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符
- 滴滴魅族手机人脸识别没有反应_手机UI颜值排名榜单,小米MIUI排到第九,魅族没有上榜...
- 兔子生崽问题编程_贵阳在哪里可以学到好的少儿编程
- jfreechart 时序图 ,生成图表
- 通信人,请不要吝啬举手之劳
- VMware workstation 创建共享盘
- Onew积极开拓国际市场,为全球用户提供全方位金融服务
- React脚手架案例
- 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
- java 定时任务哪个好_java目前常用的几种定时任务
- 服务器电源控制芯片,服务器电源中的PFC控制芯片HA16141的应用.pdf
- 世界3大IT服务品牌之一塔塔咨询服务公司发布新品牌宣言
- 密码学09(SM3算法)
- linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测
- WIN7家庭版升级到旗舰版操作
- 三国演义中的十大谎言 VS 程序员十大口头禅
- 《转》Vmware vSphere常见问题汇总
- 把oracle数据导入redis,Oracle向redis数据迁移
- element-ui el-table 表格渲染错位以及高度计算错误问题
热门文章
- php 谷歌翻译api_武汉武昌区地质勘测翻译公司-译嘉合翻译
- Android多线程优劣,Android 开发中用到的几个多线程解析
- 腾讯视频视频下载_如何下载腾讯视频
- Arrays.asList()和Collections.singletonList()比较
- Spring boot自定义启动字符画(banner)
- kettle 先删除后插入_Kettle:使用触发器和快照表进行增量数据同步
- 消息订阅与发布(pubsub)
- python自然语言处理库_Python 自然语言处理(NLP)工具库汇总
- dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)
- android闹钟延时,android闹钟定时启动延时或者直接不启动