Android 项目Log日志输出优化

概述

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();
    }

原文地址:https://www.cnblogs.com/walker-world/p/8283909.html

时间: 2024-08-05 00:22:43

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

*log日志输出用处用法等

干了这么多年,今天被技术总监又教育了 日志问题: log日志输出用处 log.info(); 用来交给运维人员统计数据或者长时间保留数据所用 log.error(); 用来捕获异常或者是处理一些不可预见或不可控制的异常,可以放对象,例如: try { MapSqlParameterSource param = new MapSqlParameterSource(); param.addValue("phone", phone, Types.VARCHAR); param.addValu

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

问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽可能少的改动配置文件,最好修改实例名后可以不修改log4j的配置文件. 实现分析:一般实现上面需求,需要在修改完war包名称之外要再做下面配置: 1.修改每个实例名下web.xml中参数webAppRootKey为不同值.同一个tomcat下运行多个web应用时,该值相同的话,运行时会抛异常. <c

iOS 将Log日志输出到文件中保存

对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额.而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退.一遍一遍的用XCode取应用崩溃记录.解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测. 对于真机,日志没法

Hadoop项目没有日志输出

问题描述:在eclipse下运行hadoop项目,没有输出日志,警告如下,意为没有找到log4j文件. log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#

自定义log日志输出到文件中保存

程序调试日志,可以 通过printf直接输出到屏幕上面进行调试.在默写特定的情况下面,可以将日志保存到文件中,后期进行查阅调试. log.h //log.h #ifndef _ITCAST_LOG_H_ #define _ITCAST_LOG_H_ /* #define IC_NO_LOG_LEVEL 0 #define IC_DEBUG_LEVEL 1 #define IC_INFO_LEVEL 2 #define IC_WARNING_LEVEL 3 #define IC_ERROR_LEV

web项目log日志查看分析-&gt;流程理解

1.DEBUG [2017-07-10 11:38:41,705][] org.springframework.web.servlet.DispatcherServlet:865 - DispatcherServlet with name 'dispatcherServlet' processing POST request for [/profit/queryProfitAccountList] 注:spring mvc的的dispatcherservlet会日志打印传进来的每个请求的url和

项目log日志打印

①使用到的jar包: 大概是这几个,具体我也不知道是哪一个,下次使用的时候自己测试下. commons-logging-1.2.jar commons-discovery-0.5.jar log4j-1.2.17.jar ②log4j.properties log4j.rootLogger=DEBUG,CONSOLE,A log4j.addivity.org.apache=false log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

maven打包日志输出优化-去掉泛型与过时的警告

pom.xml配置 1.使用eclipse编译 <!-- Eclipse编译代码时,使用的是自带的JDT(Java Development Tools), 而Maven默认使用的是JAVA_HONE中的javac,而javac相对JDT的检查机制来说, 更加的严格,所以导致Eclipse可以编译通过,而用Maven编译会报错的结果.--> <build> ... <plugins> ... <plugin> <groupId>org.apache

Android单元测试时如何使用log查看输出结果

Android单元测试与日志输出:http://blog.csdn.net/xy849288321/article/details/7054790