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

1、  目的:

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

2、  适用范围

android平台java、c++、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)、c、c++层调用:在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:系统已经出现了错误。

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

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

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

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

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

aloge alogw alogi alogd alogv相关推荐

  1. Android O 开机动画铃声

    Android O 开关机动画流程 开机动画 bootanim的启动 开机动画是在进程bootanim ,先看一下bootanim.rc中文件: android_o/frameworks/base/c ...

  2. [Android 13]开机动画原理分析

    Android开机动画 hongxi.zhu 2023-6-12 Lineageos_20(Android T) on Pixel 2XL 目录 Android开机动画 一. 开机动画的启动 1.1 ...

  3. Android开机动画启动到结束流程

    文章目录 总体流程 涉及代码路径 流程详细分析 1.init进程启动 2.SurfaceFlinger进程启动 2.SurfaceFlinger初始化和启动StartPropertySetThread ...

  4. SurfaceFlinger启动-Android12

    SurfaceFlinger启动-Android12 android12-release 1. surfaceflinger.rc文件 由init进程所启动的守护进程,在init.rc中该服务如下su ...

  5. c语言for循环开机动画,android8.1开机动画启动分析

    init.cppAOSP/system/core/init/init.cpp SurfaceFlinger是由init进程启动的 int main(int argc, char** argv) { . ...

  6. 抓log的各种方法和命令

    #单个c文件产生的log ##test1 adb root adb shell "echo -n 'file mdss_dsi_panel.c +p' > /sys/kernel/de ...

  7. Android开机动画流程(一)——启动阶段

    (1)前述 Android系统在启动的过程中,最多可以出现四个画面,每一个画面都用来描述一个不同的启动阶段. Linux uboot显示(静态) Linux 内核的启动画面(静态) init 进程的启 ...

  8. 深入Android系统(十二)Android图形显示系统-2-SurfaceFlinger与图像输出

    最近有些忙,切实体验了一把拖更的羞耻感 ( *︾▽︾) 本文和上一篇深入Android系统(十二)Android图形显示系统-1-显示原理与Surface关系比较密切,撸完前篇更易理解本文啦 (๑‾ ...

  9. ALOGV,ALOGD,ALOGI,ALOGW,ALOGE区别

    ALOGV,ALOGD,ALOGI,ALOGW,ALOGE区别 Log的等级有Verbose,Debug,Info,Warn,Error. java层调用:在java层调用import android ...

最新文章

  1. 机器学习算法基础知识
  2. app.vue里使用data_Yeoman自定义Generator使用案例及Plop的使用
  3. 黑盒测试——自动饮料售货机
  4. python socket清空接受区_用Python制作只属于你和ta的聊天渠道吧
  5. STM32端口复用和端口重映射
  6. sql:无法解决 equal to 操作中 Chinese_PRC_CI_AS 和 Chinese_Taiwan_Stroke_CI_AS 之间的排序规则冲突。...
  7. fastjson的常用用法以及自定义排序
  8. Python机器学习:多项式回归与模型泛化008模型泛化与岭回归
  9. 二进制安装MySQL
  10. matlab opencv模板匹配算法,OpenCV模板匹配函数matchTemplate详解
  11. Android 8.0 解决不能自动安装APK问题(完美适配)
  12. 在VS Code中使用Clang-Format
  13. 京东到家订单中心 Elasticsearch 演进历程
  14. uni-app - 苹果安卓系统监听物理返回按键(手机左滑返回监听)
  15. 领英销售账号的优点和销售账号(专业版)的基本操作,置顶推荐
  16. 【VRP系统你了解多少呢?】
  17. 1984年高考数学试题。
  18. 艾伟:一个让人遗忘的角落--Exception(一)
  19. AJAX for asp.net 插件安装及测试
  20. 机器人 海难饥荒_饥荒海难wx78怎么样?机器人好用吗?

热门文章

  1. 学习云计算前景如何?云计算在物联网中到底起到什么作用?
  2. arduino pwm电机调速程序
  3. 二维背包问题(二维0-1背包)
  4. 哪种灯对眼睛视力保护最好?盘点五款全光谱光照的护眼台灯
  5. 海量存储检索原理系列文章(都是精华)
  6. MYSQL安装出现问题(服务无法启动,The service already exists)
  7. c++中map、multimap、unordered_map、unordered_multimap的区别
  8. 亚马逊面部识别系统大乌龙:将28名议员认成嫌犯
  9. [附源码]计算机毕业设计Python疫情防控管理系统(程序+源码+LW文档)
  10. carmaker主要模块使用说明