• Android



    http://blog.csdn.net/liuxd3000/article/details/13768141


    1、  目的:

    为了规范软件工程师在Android代码编写过程中输出Log的行为,使得发布的产品中打印的Log是必须的,打印的Log的级别是能真实反映此Log对应的级别,标签、Log内容具有很好的可读性。

    2、  适用范围

    android平台Javac++c代码编写。

    3、  Log的调用及等级介绍

    (1)Log的等级有Verbose,Debug,Info,Warn,Error

    (2)java层调用:在java层调用import android.util.Log,在需要打印Log的地方执行Log.v,Log.d,Log.i,Log.w,Log.e.

    (3)cc++层调用:在c,c++层包含此头文件:#include <cutils/log.h>,在需要调用Log的地方执行:ALOGV,ALOGD,ALOGI,ALOGW,ALOGE

    (4)、各个Log等级的使用

    Verbose: 开发调试过程中一些详细信息,不应该编译进产品中,只在开发阶段使用。(参考api文档的描述:Verbose should never be compiled into anapplication except during development

    Debug: 用于调试的信息,编译进产品,但可以在运行时关闭。(参考api文档描述:Debug logs are compiled in but stripped atruntime

    Info:例如一些运行时的状态信息,这些状态信息在出现问题的时候能提供帮助。

    Warn:警告系统出现了异常,即将出现错误。

    Error:系统已经出现了错误。

    InfoWarnError这三个等级的Log的警示作用依次提高,需要一直保留。这些信息在系统异常时能提供有价值的分析线索。

    4、  具体规则

    1)、Verbose等级的Log,请不要在user版本中出现。Verbose级别的Log输出参见下面例子。

    示例Java部分:

    import android.os.Build;

    import android.util.Log

    final public Boolean isEng =Build.TYPE.equals("eng");

    if (isEng)

     Log.v(LOG_TAG,LOG_MESSAGE);

     

    示例c、c++部分:

    #include<cutils/log.h>

    char value[PROPERTY_VALUE_MAX];

    int isEng=0;

    property_get("ro.build.type",value, "user");

    isEng=strcmp(value, "eng");

    if (isEng)

     ALOGV();

     

    2)、Debug等级的log,默认不开启,通过终端命令开启。

    Debug级别的log输出参见下面例子。

    示例Java部分:

    import android.util.Log

    final String TAG=”MyActivity”;

    final public Boolean LOG_DEBUG = Log.isLoggable(TAG, Log.DEBUG);

     

    if (LOG_DEBUG)

      Log.d(LOG_TAG,LOG_MESSAGE);

     

    运行时开启log: 在终端输入:setprop log.tag.MyActivity DEBUG

    运行时关闭log: 在终端输入:setprop log.tag.MyActivity INFO

     

    示例c、c++部分:

    #include<cutils/log.h>

    #defineLOG_CTL debug.MyActivity.enablelog

    charvalue[PROPERTY_VALUE_MAX];

    int isDebug=0;

    property_get(LOG_CTL,value, "0");

    isDebug=strcmp(value,"1");

    if (isDebug)

      ALOGD();

    运行时开启log: 在终端输入:setpropdebug.MyActivity.enablelog 1

    运行时关闭log: 在终端输入:setpropdebug.MyActivity.enablelog 0

     

    3)、InfoWarnError等级的Log禁止作为普通的调试信息使用,这些等级的Log是系统出现问题时候的重要分析线索,如果随意使用,将给Log分析人员带来极大困扰。请参考前面的等级介绍合理使用。

    (4)、禁止使用new Exception("print trace").printStackTrace()或者Log. getStackTraceString(Exception)方式打印普通调试信息,因为这种方式打印Log非常消耗系统资源。此种方式打印Log一般只出现try..catch某个异常使用。

    5)、Logtag命名,使用Activity名称或者类、模块的名称,不要出现自己的姓名拼音或其他简称。在c++/c代码中调用ALOGD等宏函数,参数没有传入tag,需要在文件头部#define LOG_TAG"YOUR_TAG_NAME"

    6)、Log的内容,不要出现公司名称、个人名称或相关简称,Log内容不要出现无意义的内容,如连续的等号或星号或连续的数字等,Log内容要方便其他分析Log的人员查看。

    7)、Log输出的频率需要控制,例如1s打印一次的Log,尽量只在eng版本使用,user版本如需开启,请默认关闭,通过设置setprop命令来开启。


  • 相关阅读:
    做了好几年的程序员,才发现自己天天都在用设计模式!
    先搞清楚这些问题,简历上再写你熟悉Java!
    Java中实现多线程继承Thread类与实现Runnable接口的区别
    JAVA中实现多线程的四种方式
    JDK和Cglib动态代理
    Java中选择排序,冒泡排序,插入排序,快速排序
    java死锁详解
    github常用命令
    字符串之StringBuffer 与 StringBuilder的对比
    基础数据类型之AbstractStringBuilder
  • 原文地址:https://www.cnblogs.com/ztguang/p/12645195.html
Copyright © 2020-2023  润新知