概述

Android开发过程中经常需要向控制台输出日志信息,有些人还在用Log.i(tag,msg)的形式或者system.out.println(msg)方式吗?本篇文章对日志信息输出进行优化,以达到快速定位输出日志位置及输出规范日志的效果。日志输出行展示调用输出日志信息在哪个文件的第几行,并且可以和点击跳转到对应位置的作用。

输出日志的一般形式

1、在项目中直接调用Log.i(tag,msg)或者println函数,这是初级开发者的做法,不便于后期维护与统一控制。

2、在项目中对输出操作进行封装,在封装类中统一调用,这是成熟开发人员的做法,便于统一控制日志输出,并在发版时取消日志输出操作。

3、对第二种方法进一步优化,让日志全面展示调用信息及方便开发过程中通过IDE直接跳转到调用位置。本文即对第三种优化进行记录。

封装日志操作

将常见日志输出操作统一放到一个类中,项目需要输出日志时通过这个类进行调用,相信大家都有封装,此步不做详细说明。

日志信息输出优化

我们在封装Log操作时经常遇到一个难题,那就是TAG如何制定,让调用者作为参数传入还是固定使用一个常亮?我的操作时自动调出调用位置信息,将这些信息进行处理后作为TAG,查看日志时看一看到是哪个文件的第几行在输出日志。

以下为获取TAG信息的方法,可以直接复制到代码中调用,将其作为文本内容通过println函数输出也可实现此效果。

/**
* 运行栈类名
*/
static String stackClassName = "";
/**
* 运行栈
*/
static StackTraceElement[] stackTraceElements; /**
* 获取默认TAG
*/
private static String getDefaultTag(){
try {
//获取当前运行任务栈信息
stackTraceElements = Thread.currentThread().getStackTrace();
//遍历任务栈信息,获取调用者信息并返回
for (StackTraceElement stackTraceElement : stackTraceElements) {
stackClassName = stackTraceElement.getClassName() + "";
//仅获取本项目下的非此类调用信息
if (!stackClassName.contains(LogUtil.class.getSimpleName()) && stackClassName.contains("com.")) {
return "(" + stackTraceElement.getFileName() + ":" + stackTraceElement.getLineNumber() + ")";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return LogUtil.class.getSimpleName();
}

Android 项目Log日志输出优化的更多相关文章

  1. android实现log日志输出

    1.下载android的log4j的库(的封装) 去: http://code.google.com/p/android-logging-log4j/ 下载对应的 android-logging-lo ...

  2. android的Log日志打印管理工具类(一)

    android的Log日志的打印管理工具类: package com.gzcivil.utils; import android.util.Log; /** * 日志打印管理 * * @author ...

  3. web项目Log4j日志输出路径配置问题

    问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...

  4. tomcat 和 jboss access log 日志输出详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt179 工作中nginx+jboss/tomcat反向代理集成,想打开后端jb ...

  5. Android的log日志知识点剖析

    log类的继承结构 Log public final class Log extends Object java.lang.Object ↳ android.util.Log log日志的常用方法 分 ...

  6. 通过Docker部署Java项目的日志输出到宿主机指定目录

    之前写过2篇关于Docker部署的文章: 1.超!超!超简单,Linux安装Docker 2.Docker通过阿里云镜像仓库使用Gitlab_CI部署SpringBoot项目 用上篇博客部署Java程 ...

  7. Android关于log日志,华为不输出log.v,log.d(zz)

    [java] view plain copy 我用的是mate8,本来虚拟机测试一点日志一点问题没有 [java] view plain copy 但是真机测试发现log.d一直不输出,正好又试了lo ...

  8. web项目log日志查看分析->流程理解

    1.DEBUG [2017-07-10 11:38:41,705][] org.springframework.web.servlet.DispatcherServlet:865 - Dispatch ...

  9. Scrapyd日志输出优化

    现在维护着一个新浪微博爬虫,爬取量已经5亿+,使用了Scrapyd部署分布式. Scrapyd运行时会输出日志到本地,导致日志文件会越来越大,这个其实就是Scrapy控制台的输出.但是这个日志其实有用 ...

随机推荐

  1. C#下JSON字符串的反序列化

    C#下JSON字符串的反序列化,一般都是用newtonsoft.json,比较方便..net当然也有提供相应功能,但觉得比较复杂. 所谓反序列化,就是将一个包含JSON内容的字符串,转换回指定对象(不 ...

  2. Spark 决策树--回归模型

    package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.evaluation.Regres ...

  3. ssh验证和端口转发

    ssh 服务登录验证 ssh 服务登录验证方式: 用户/ 口令 基于密钥 基于用户和口令登录验证 客户端发起ssh请求,服务器会把自己的公钥发送给用户 用户会根据服务器发来的公钥对密码进行加密 加密后 ...

  4. centos docker 安装mysql 8.0

    centos 版本  CentOS Linux release 7.5.1804 (Core) 内核版本: 3.10.0-862.el7.x86_64 下载最新版mysql docker pull m ...

  5. 添加tomcat开机启动服务时报错:Neither the JAVA_HOME nor the JRE_HOME enviromment variable is defined

    首先,参考的 https://blog.csdn.net/wabil/article/details/78818249 的方式添加 tomcat 开机启动,这种方式不需要添加 setenv.sh 文件 ...

  6. 图片预览------photoswipe 使用

    photoswipe 使用 预览图片后,需要点击关闭按钮才能关闭,点击图片事件效果是放大图片,和微信的效果不一致,最后改用微信预览图片的接口了,但是例子可以用,记录一下!! http://www.cn ...

  7. 关于ListView的注意点

    解决ListView的一些常见问题: 1.listview在拖动的时候背景图片消失变成黑色背景,等到拖动完毕我们自己的背景图片才显示出来 解决:在XML中加入 android:scrollingCac ...

  8. Using 10053 Trace Events and get outline

    When it comes to performance tuning, we can spend time on one or both ends of the problem. On the &q ...

  9. 编写UI自动化测试用例原则

    1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器.2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统3.尽量只做功能中正向逻辑的验证,不要考虑 ...

  10. [转]深入ASP.NET MVC之二:路由模块如何工作

    本文转自:http://www.cnblogs.com/yinzixin/archive/2012/11/05/2754483.html 摘要: 上文分析了UrlRouting模块何时会被触发,本文重 ...