转载请标明出处:一片枫叶的专栏

本文主要讲解的是自己实现一个简单的Android日志框架,可以在Android studio控制台中输入日志信息,其简单的使用方式:

L.v("...");
L.d("...");
L.i("...");
L.w("...");
L.d("...");

其中v、d、i、w、d分别代表着不同的日志级别,和Android原生的Log日志级别是相同的。

(一)相关说明
为了熟悉github与Jcenter代码库的使用,编写了一个小的Android日志框架,主要参考的是logger框架;

(二)相关知识点

  • Android中获取类名,方法名,与代码行数:
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();int index = 4;
String className = stackTrace[index].getFileName();
String methodName = stackTrace[index].getMethodName();
int lineNumber = stackTrace[index].getLineNumber();
  • Android中日志级别的定义:

1、Log.v 的输出颜色为黑色的,输出大于或等于VERBOSE日志级别的信息
2、Log.d的输出颜色是蓝色的,输出大于或等于DEBUG日志级别的信息
3、Log.i的输出为绿色,输出大于或等于INFO日志级别的信息
4、Log.w的输出为橙色, 输出大于或等于WARN日志级别的信息
5、Log.e的输出为红色,仅输出ERROR日志级别的信息.

(三)代码实现

package com.example.aaron.library;import Android.util.Log;/*** Created by aaron on 15/11/27.* 模仿logger,创建自己的日志操作类*/
public class MLog {public static final String TAG = MLog.class.getSimpleName();/*** 控制变量,是否显示log日志*/public static boolean isShowLog = false;public static String defaultMsg = "";public static final int V = 1;public static final int D = 2;public static final int I = 3;public static final int W = 4;public static final int E = 5;/***  初始化控制变量* @param isShowLog*/public static void init(boolean isShowLog) {MLog.isShowLog = isShowLog;}/*** 初始化控制变量和默认日志* @param isShowLog* @param defaultMsg*/public static void init(boolean isShowLog, String defaultMsg) {MLog.isShowLog = isShowLog;MLog.defaultMsg = defaultMsg;}public static void v() {llog(V, null, defaultMsg);}public static void v(Object obj) {llog(V, null, obj);}public static void v(String tag, Object obj) {llog(V, tag, obj);}public static void d() {llog(D, null, defaultMsg);}public static void d(Object obj) {llog(D, null, obj);}public static void d(String tag, Object obj) {llog(D, tag, obj);}public static void i() {llog(I, null, defaultMsg);}public static void i(Object obj) {llog(I, null, obj);}public static void i(String tag, String obj) {llog(I, tag, obj);}public static void w() {llog(W, null, defaultMsg);}public static void w(Object obj) {llog(W, null, obj);}public static void w(String tag, Object obj) {llog(W, tag, obj);}public static void e() {llog(E, null, defaultMsg);}public static void e(Object obj) {llog(E, null, obj);}public static void e(String tag, Object obj) {llog(E, tag, obj);}/*** 执行打印方法* @param type* @param tagStr* @param obj*/public static void llog(int type, String tagStr, Object obj) {String msg;if (!isShowLog) {return;}StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();int index = 4;String className = stackTrace[index].getFileName();String methodName = stackTrace[index].getMethodName();int lineNumber = stackTrace[index].getLineNumber();String tag = (tagStr == null ? className : tagStr);methodName = methodName.substring(0, 1).toUpperCase() + methodName.substring(1);StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("[ (").append(className).append(":").append(lineNumber).append(")#").append(methodName).append(" ] ");if (obj == null) {msg = "Log with null Object";} else {msg = obj.toString();}if (msg != null) {stringBuilder.append(msg);}String logStr = stringBuilder.toString();switch (type) {case V:Log.v(tag, logStr);break;case D:Log.d(tag, logStr);break;case I:Log.i(tag, logStr);break;case W:Log.w(tag, logStr);break;case E:Log.e(tag, logStr);break;}}
}

(四)如何上传github
参考:github项目解析(一)–>上传Android项目至github

(五)如何将代码上传至JCenter
参考: github项目解析(二)–>将Android项目发布至JCenter代码库

(六)使用方式

1)在build.gradle中引用MLog框架

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.Android.support:appcompat-v7:23.1.1'compile 'com.Android.support:design:23.1.1'compile 'com.yipianfengye:MLog:1.0.0'
}

2) 自定义Application

<applicationAndroid:name=".MApplication"Android:allowBackup="true"Android:icon="@mipmap/ic_launcher"Android:label="@string/app_name"Android:supportsRtl="true"Android:theme="@style/AppTheme" >

3)在自定义的Application的onCreate方法中初始化MLog框架

/*** Created by liuchao on 2016/1/26.*/
public class MApplication extends Application{@Overridepublic void onCreate() {super.onCreate();MLog.init(true);}
}

4)在代码中使用MLog框架

fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {MLog.i("测试MLog框架!!!");}});

附:源码地址(github即使用方式)
https://github.com/yipianfengye/MLog

另外对github项目,开源项目解析感兴趣的同学可以参考我的:
Github项目解析(一)–>上传Android项目至github
Github项目解析(二)–>将Android项目发布至JCenter代码库
Github项目解析(三)–>Android内存泄露监测之leakcanary
Github项目解析(四)–>动态更改TextView的字体大小

Github项目解析(五)--Android日志框架相关推荐

  1. html获取此次点击的id,github项目解析(八)--Activity启动过程中获取组件宽高的三种方式...

    转载请标明出处:1片枫叶的专栏 上1个github小项目中我们介绍了避免按钮重复点击的小框架,其实现的核心逻辑是重写OnClickListener的onClick方法,添加避免重复点击的逻辑,即为第2 ...

  2. Github项目解析系列

    转载请标明出处:一片枫叶的专栏 Github项目解析系列主要解析的是平时开发过程中遇到的小项目小例子,自己总结的一些研发技巧与实践,以及一些Github中流行的项目等.基本上blog中所涉及到的项目都 ...

  3. Github项目解析(九)--实现Activity跳转动画的五种方式

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了在Activity ...

  4. android导入github项目,上传Android项目至github的解析

    这是一个新的系列的文章,github项目,主要讲解了自己的github项目开源实践,github项目解析等. 本文主要讲解了如何将自己的android项目上传至github,相信大家平时在开发过程中为 ...

  5. android 日志框架封装,FLog: 一个基于函数组合的Android日志框架,拥有极简的结构和极高的灵活性、扩展性...

    FLog 一个基于函数组合的Android日志框架,拥有极简的结构和极高的灵活性.扩展性 下载 在根目录下的build.gradle中添加jitpack.io的maven地址 allprojects ...

  6. android日志框架

    背景:在工业互联网项目开发过程中,当程序出现异常错误,由于条件限制,开发者往往无法及时获取到程序异常信息,于是需要将程序运行的状态以及内部参数完整的记录到本地,以便于开发调试. 为什么要写这篇博客:& ...

  7. 【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 分析 Spring MVC提供了一个DispatcherServlet来开发Web应 ...

  8. 可能是全网最全,JAVA日志框架适配、冲突解决方案,可以早点下班了!

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  9. 可能是全网最全,JAVA日志框架适配/冲突解决方案,可以早点下班了

    点击关注公众号,Java干货及时送达 你是否遇到过配置了日志,但打印不出来的情况? 你是否遇到过配置了logback,启动时却提示log4j错误的情况?像下面这样: log4j:WARN No app ...

最新文章

  1. linux shell 判断文件 修改时间和系统时间差
  2. 通过OWA修改密码,提示您输入的密码不符合最低安全要求
  3. 一口气说出 6种 延时队列的实现方法,面试官也得服
  4. ubuntu配置spyder和jupyter notebook的工作目录
  5. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——F题 成绩查询ing
  6. 读取Apache访问日志,查看每一个独立客户端连接获得的字节数
  7. python实现找到给定列表中满足给定和的所有子列表,元素可重复使用
  8. 调用大漠插件5.1423
  9. 生鲜APP软件功能开发
  10. 华为是不是培养人工智能人才花费最大的公司?
  11. 服务器winsxs文件夹怎么清理工具,winsxs文件夹怎么清理 winsxs文件夹清理方法教程...
  12. 解决不支持S/W HEVC(H265)解码/找不到FFmpeg64.dll
  13. 解决uni-app uniCloud小程序预览没有数据
  14. TimeSformer:抛弃CNN的Transformer视频理解框架
  15. C语言字符5,C语言字符数据(4、5).doc
  16. IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证
  17. 如何在 JavaScript 中检查数字是正数还是负数
  18. Mac Docker Desktop “Mounts denied: EOF.“解决方法
  19. spring关于Aspect、Joinpoint、Advice Pointcut的区别
  20. 微信分享官方第三方接入(图片及文字)

热门文章

  1. 这可能是介绍 ZooKeeper 最好的文章了
  2. python检查https过期_Python实现HTTPS网站证书过期监控及更新
  3. 使用sklearn训练模型出现【DataConversionWarning: A column-vector y was passed when a 1d array was expected】
  4. ElasticSearch集群黄色原因以及解决方案
  5. css hover变成手_html实现鼠标悬停变成手型实现方式
  6. 旋转卡(qia)壳 平面最远点对
  7. Excel翻译单元格内容
  8. 形式化方法:Linear Arithmetic
  9. 微信小游戏接入遇到的坑
  10. 聊一聊DDR3中的ODT(On-die termination)