解读Android LOG机制的实现:(2)JAVA域输出LOG

田海立@CSDN

2011/07/24

Android提供了用户级轻量的LOG机制,它的实现贯穿了Java,JNI,本地c/c++实现以及LINUX内核驱动等Android的各个层次,而且还足够简单清晰,是一个相当不错的解读案例。本系列文章针对LOG机制的内部实现机理进行解读,本文是系列之二,解读Android的Java程序中如何输出LOG信息到LOG的体系中。

LOG输出帮助类

Android的Java程序通过android.util.Log类来输出Log,下图列出了我们常用的Log的静态方法。

一般,要输出Log信息,可直接调用Log.v()/Log.d()/Log.i()/Log.w()/Log.e()等类方法。这里之所以有这么多有区分的方法,这也是Log的分类。Log的分类就如同Log的静态常量成员定义的那样,而Log的优先级按照数字大小排列,数字大的优先级高。而Log.wtf()记录的则是非常致命的FAULT信息(What a Terrible Failure),报这个错误,不光是在Log里记录,还要在界面上有提示,并可能杀死当前的进程。

有了这些分类,如果要输出的LOG优先级低于当前设置的优先级,则该Log信息不会显示。一般的,在Java程序中用Log的方法打印Log之前,应先用isLoggable()判断一下,该级别是否能被记录。

另外,用Log.println()能达到与Log.v()/Log.d()/…等方法同样的输出效果,只是在用它时,要指定对应的优先级。

类Log的实现

类android.util.Log的实现是比较简单的。

类android.util.Log的构造函数是私有的,并不会被实例化,只是提供了静态的属性和方法。

而android.util.Log的各种Log记录方法的实现都依赖于native的实现println_native(),Log.v()/Log.d()/Log.i()/Log.w()/Log.e()最终都是调用了println_native()。如Log.d()的实现:

    public static int d(String tag, String msg) {        return println_native(LOG_ID_MAIN, DEBUG, tag, msg);    }

Native方法println_native()是通过JNI在c/c++中实现的,详情参阅本系列之三:JNI及c/c++ 域写设备文件。

【本系列文章】

解读Android LOG机制的实现:(1)LOG的实现架构

解读LOG机制的实现架构。

解读Android LOG机制的实现:(2)Java域输出LOG

解读Android的Java程序中如何输出LOG信息到LOG的体系中。

解读Android LOG机制的实现:(3)JNI及NATIVE域写设备文件

解读android.util.Log的JNI实现,以及在c/c++的本地实现中如何操作设备文件写Log信息。

解读Android LOG机制的实现:(4)LOG设备驱动logger

解读LINUX内核中的设备驱动Logger中实现。Logger是Android为Linux写的一个MISC类型驱动,用循环队列实现了读者/写者。Logger是整个LOG机制实现的核心。

解读Android LOG机制的实现:(5)获取LOG程序LogCat

解读应用程序LogCat如何通过对设备文件的open()/select()/read()来获取LOG信息。

解读Android LOG机制的实现:(6)c/c++域使用LOG

解读Android的c/c++程序中如何使用LOG机制记录LOG信息。

更多相关文章

  1. Android(安卓)开发者从0到1发布一个微信小程序的采坑过程——详
  2. Android实现伸缩弹力分布菜单效果
  3. Android消息循环的同步屏障机制及UI渲染性能的提升(Android(安卓)
  4. [置顶] 我的Android进阶之旅------>Android疯狂连连看游戏的实现
  5. 2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
  6. 用android LinearLayout和RelativeLayout实现精确布局
  7. 关于Android中的消息机制和异步
  8. 解读Android(安卓)LOG机制的实现:(6)c/c++域使用LOG
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. Forefront TMG+路由器后Internet不能正常
  2. 在eve-ng模拟器上进行Cisco单臂路由配置,
  3. BGP路由优选原则:优选下一跳IGP metric较
  4. 当交换机配置发生变化,如何自动备份配置到
  5. BGP路由优选原则之MED值
  6. 如何用web方式给交换机升级?
  7. BGP路由优选原则:ebgp路由优于ibgp
  8. 0409作业-懒加载及轮播图
  9. 怎么获得FIL满算力挖矿?
  10. js基础知识:变量作用域与闭包,以及类与类的