Android L日志系统2——JavaAPI与liblog
来源:互联网 发布:金融交易软件开发 编辑:程序博客网 时间:2024/06/02 05:13
在 Android L(包含Android L)之后,Andoird使用了全新的日志系统,也非之前结合Kernel Ring Buffer的方式来存储,读写Log。替而代之是使用新的日志机制Logd。所以说,在/dev/log/下面创建的几个设备,根本就没有使用!没有使用!
其实,init在创建它们的时候,就有说明,只是没有注意到了。
INFO("kernel logger is deprecated\n");
就来分析Android L的日志系统。
从上一篇文章《Kernel的环形Buffer(Ring Buffer)——以Logger Buffer为例》分析可知,Android系统的Log都是用一个环形buffer来存储管理的,换成Logd之后,应该也是通过Ring Buffer来管理,只是由Kernel空间,改成用户空间。那么现在就来看看用户层是如何,往这个buffer中写Log,以及从这个buffer中读出来Log。
在Java层写APP时,一般都会调用android.util.Log这个包的一些静态方式来打印Log;
java.lang.Object
↳android.util.Log
API for sending log output.
Generally, use the Log.v() Log.d() Log.i() Log.w() and Log.e() methods.
分析Log.java,Log.v() Log.d() Log.i等等最终都调用到
public static int v(String tag, String msg) {
return println_native(LOG_ID_MAIN, VERBOSE, tag, msg);
}
=》通过JNI调用android_util_Log.cpp
{ "println_native", "(IILjava/lang/String;Ljava/lang/String;)I", (void*) android_util_Log_println_native },
...>
static jint android_util_Log_println_native(JNIEnv* env, jobject clazz,
jint bufID, jint priority, jstring tagObj, jstring msgObj)
{
//先判断ID是否是一个合法LOG_ID_MAX,这个变量定义在system/下面的Log.h里面
- if (bufID < 0 || bufID >= LOG_ID_MAX) {
jniThrowNullPointerException(env, "bad bufID");
return -1;
}
- //取出来TAG
if (tagObj != NULL)
tag = env->GetStringUTFChars(tagObj, NULL);
- //取出要写入的Message
msg = env->GetStringUTFChars(msgObj, NULL);
//调用__android_log_buf_write来写入到buffer
int res = __android_log_buf_write(bufID, (android_LogPriority)priority, tag, msg);
if (tag != NULL)
env->ReleaseStringUTFChars(tagObj, tag);
env->ReleaseStringUTFChars(msgObj, msg);
return res;
}
__android_log_buf_write是在liblog中实现的。
在liblog中,会通过sokect通讯把要写入log交给logd去处理,大致流程如下:
0 0
- Android L日志系统2——JavaAPI与liblog
- ANDROID L日志系统——JAVAAPI与LIBLOG
- Android L liblog
- Android L日志系统1——logd
- Android liblog
- android JNI调用系统liblog.so打印Log
- 黑马程序员——JavaAPI
- android系统的日志系统分层与logcat使用
- Android L(Android 5.0) 系统主色调
- log4j与日志系统
- android 日志系统
- android日志系统
- android 读取系统日志
- Android日志系统
- Android Log 日志系统
- Android Logger日志系统
- Android 日志系统
- android系统日志
- LeetCode OJ-22.Generate Parentheses(回溯法)
- android 修改电池电量图标介绍
- 【Hibernate框架】关联映射(一对一关联映射)
- Android实验三事件
- VS下EXE可执行文件启动代码剖析(4)_cinit 函数
- Android L日志系统2——JavaAPI与liblog
- linux常用命令大全
- mysql 中文镜像地址
- 点和直线的计算(直线的参数方程表示)刘汝佳版
- 多柱深度神经网络——Multi-column Deep Neural Networks for Image Classification
- java基础知识总结
- JS实现回车搜索的两种方法
- Swift语言学习笔记(一)
- mavne工程运行报错:软件包javax.crypto 不存在解决办法