解读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()的实现:
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信息。
分享到:
相关推荐
一个收集 app 输出日志的工具,输出文件:模拟器是 /sdcard/Android/data/项目包名/cache/,真机是 /Android/data/项目包名/cache/,里面的 crash 目录是崩溃日志,log 目录是 logcat 日志。 如何使用 在 module ...
对想深入研究Android中Log的实现机制的同志有用,在此分享给大家
android.util.Log is the most usable library of the Android. But, when the app released on the market, some important information is clearly forgotten by the developer. All logs are disabled by Debug...
android自定义log日志输出工具,该工具类具有以下优点: 1 在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名。 如 : LogUtils.i(this,”这是一个实用的日志...
log4j:ERROR Failed to rename
在Tomcat6下使用Log4j记录日志,天创建新日志文件时(日志文件设置为:org.apache.log4j.DailyRollingFileAppender)报: log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以...
解决log4j:ERROR Failed to rename, win系统占用文件无法改名字的问题
log4j:ERROR Failed to rename错误解决办法 http://www.blogjava.net/DreamAngel/archive/2011/11/10/363400.html
Log4a is an mmap based, high-performance, highly available Android log collection framework | Log4a 是一个基于 mmap, 高性能、高可用的 Android 日志收集框架
Android一个简单实用把Log日志打印到手机本地文件,可以自行取出来上传到服务器开源代码
java控制台实现像log4j一样的输出,类和方法,以及行数的追踪。 控制台个性化输出。log4j日志原理。日志输出的自实现。自己的日志框架,不需要使用任何框架和jar包。纯java代码实现日志输出到控制台和指定位置的文件...
2: Use FileLogUtils.write (your Log information); Log File Path: If the SD card or external memory exists, the SD Android data package name files Log logs.txt If there is an SD card or ex
当Android代码java层发生崩溃的时候,会将崩溃信息收集起来
兼容 Android Studio 3.1.0 的 Logcat 完美显示日志 兼容 Kotlin 可设置 Log 开启和关闭 可设置是否输出到控制台(Logcat) 可设置 Log 全局 Tag 全局 Tag 为空时 Tag 为当前类名 可设置 Log 是否显示头部信息 Log ...
在Android 系统中所有的热插拔设备都是通过Vold 进程挂载的。通过kernel–>vold–>StorageManagerService这样的... setenv(ANDROID_LOG_TAGS, *:v, 1); android::base::InitLogging(argv, android::base::LogdLogger
Log4Android2PCv2.3.7
Log4j2实现不同线程不同级别日志输出到不同的文件中 源码+log4j jar包
Java项目下用的一个实现了类似Android下Log类。Android向Java学习的同学习惯的Log.i()用法
Android显示Log信息(带行号),非常好用的Android工具类!
示范如何在android工程中使用log4j记录日志