android core log,Android 日志系统(Logcat)的实现分析

这篇说一下Android 日志系统的实现:

1. Android中的打印分为4个缓冲区和6个打印等级,在frameworks\base\core\java\android\util\Log.java中有定义:

四缓冲:

public static final int LOG_ID_MAIN = 0;

public static final int LOG_ID_RADIO = 1;

public static final int LOG_ID_EVENTS = 2;

public static final int LOG_ID_SYSTEM = 3;

六等级:

public static final int VERBOSE = 2;

public static final int DEBUG = 3;

public static final int INFO = 4;

public static final int WARN = 5;

public static final int ERROR = 6;

public static final int ASSERT = 7;

2.Android Log打印有两种,一种是Java层添加的,一种是C/C++代码中添加的,如下图:

0818b9ca8b590ca3270a3433284dd417.png

上图可以很容易看出,不管是java,还是C/C++,其实最终调用的driver接口都是一样的,java只是通过了jni调用了Android框架下实现的Liblog本地库,而C/C++则是直接调用的本地库。

Andorid Log的实现其实是一个典型的Android框架下的APK如何进行系统调用到驱动的实现。

3.从上面的流程可以很难清晰地知道Android代码中整个log的写入实现流程,而最终log输出最终的实现是/system/bin/logcat的一个工具。

其实/system/bin/logcat的实现也就是通过系统调用,读取的/dev/log/main、/dev/log/radio、/dev/log/events、/dev/log/system四个驱动文件中的缓冲信息。

具体实现可以参考源码:/system/core/logcat/logcat.cpp

4. 最后说一下Android代码中添加打印

a. java中添加打印

import android.util.Log;

使用Log.v()、Log.d()、Log.i()、Log.w()、Log.e()

b. C/C++中添加打印

两种方法:

第一种:

1、在Android工程的Android.mk文件中添加如下内容:

LOCAL_SHARED_LIBRARIES := liblog libutils

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

2、在JNI的实现代码文件(.c或者.cpp)中加入包含LOG头文件的如下代码:

#include

3、在需要打印的方法中添加打印代码,例如:

__android_log_print(ANDROID_LOG_INFO, "JniX431FileTest", "lsx_init");

// ANDROID_LOG_INFO:是日志级别;

// "JniX431FileTest":是要过滤的标签,可以在LogCat视图中过滤。

// "lsx_init":是实际的日志内容。

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "ProjectName", __VA_ARGS__)

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "ProjectName", __VA_ARGS__)

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO  , "ProjectName", __VA_ARGS__)

#define LOGW(...) __android_log_print(ANDROID_LOG_WARN  , "ProjectName", __VA_ARGS__)

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , "ProjectName", __VA_ARGS__)

4、LOGV(...)、LOGD(...)、LOGI(...)、LOGW(...)、LOGE(...) 也直接使用函数__android_log_print()

第二种、使用宏ALOGV、ALOGD、ALOGI、ALOGW、ALOGE   // 宏的实现在头文件android/log.h中

例:ALOGW("%s : set OMX_IndexMstarTeePath failed!!", componentName.c_str());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android矢量图 内存大,Android内存控制小技巧-使用矢量图来节省你的内存并简化你的开发。...

先上一个 位图和矢量图的 说明。外链网址已屏蔽维基百科里面有更详细的说明 我就不贴地址了。简单来说就是位图 比 矢量图要大。但是位图可以适用于各种场景。但是矢量图就只能显示一些有规律的图形。复杂的做不了或者是很难做。对于android来说,我们一般app里面 会…

idea 快捷键代码行标记并快捷跳到标记行

idea有一个组合快捷键 标记代码行(左边的行数会出现一个1,代表着已经标记了) ctrlshift1 迅速跳到标记行 ctrl1 这边给大家送上显示GIF

鸿蒙之火是什么意思,鸿蒙突然火了!鸿蒙是什么?

原标题:"鸿蒙"突然火了!"鸿蒙"是什么?什么是鸿蒙?鸿蒙是什么?很多人都在发问,仿佛一夜之间就火了的鸿蒙有何独特之处?鸿蒙是真的来了。鸿蒙是文化,鸿蒙也是科技…

String类的indexOf方法的用法和举例

String类的indexof方法的作用和返回值: 今天在这里重点回顾一下,希望对大家能有所帮助: indexOf(int,ch) 先看第一个indexOf它返回值是int,在看它的参数(int,ch&#x…

Java字符串池(String Pool)深度解析

在工作中,String类是我们使用频率非常高的一种对象类型。JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,这就是我们今天要讨论的核心,即字符串池(String Pool&#xff0…

用dl元素编辑html个人信息,html dl dt dd标签元素语法结构与使用

dl dt dd认识及dl dt dd使用方法一、dl dt dd认识 - TOPhtml 是一组合标签,使用了dt dd最外层就必须使用dl包裹,此组合标签我们也又叫表格标签,与table表格类似组合标签,故名我们也叫dl表格(扩展阅读:table tr td、…

千牛怎么注销卖家店铺_新店铺怎么拥有亚马逊购物车?亚马逊小卖家如何尽快获得黄金购物车?...

我做跨境电商也有六年的时间了,在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富,但会将我知道的都进行分享。如果有不懂得亚马逊问题可以我(V:772024802)。我这里给大家安排一堂直播课,可以系统的帮你解决做亚马逊…

mysql中like是否使用索引

一.测试数据 CREATE TABLE test_orderdetail (id int(11) NOT NULL AUTO_INCREMENT,order_id int(11) DEFAULT NULL,product_name varchar(100) DEFAULT NULL,cnt int(11) DEFAULT NULL,create_date datetime DEFAULT NULL,PRIMARY KEY (id),KEY idx_orderid_productname (pro…

电子科大16秋计算机应用基础在线作业一,电子科大16秋《计算机应用基础(本科)》在线作业3...

电子科技大学电子科大16秋《计算机应用基础(本科)》在线作业3一、单选题(共35 道试题,共70 分。)1. 在Windows,打开一个菜单后,其中某菜单项会出现下属级联菜单的标识是()。A. 菜单右侧有一组英文提示B. 菜单右侧有一个黑色三角形C. 菜单左侧有一个黑色圆点D. 菜单左…

wince手机投屏代码_除了 iOS,这些手机系统你肯定没用过

今年是2020年,智能手机市场经过大浪淘沙,留存下来的品牌可以说都是精品,国外的像苹果、三星、索尼、LG,国内有华为、小米、OV、魅族....都是有特色有竞争力的。华为在海外的巨幅广告牌但是大家有没有发现,如此多的手机…

SpringBoot读取Resource下文件的几种方式

最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传;这里待下载模板位置为resource/excleTemplate/test.xlsx,尝试了四种读取方式,并且测试了四种读取方式分别的windows开发…

kido机器人用流量吗_国脉电信200元天网卡,交1700流量无线用,拉人加入还会有不错的收益,你信吗?反正我是不信!...

最近又很多人咨询小编国脉天电信网卡是真的吗,是不是骗人的。关于国脉天网骗局,反传销联合会曾在网站发表了一篇关于国脉天网骗局的文章。今天来说说200元的国脉天网和1700的流量包。首先来说说200元购买的国脉天网卡,这个也就是国脉电信推广…

孩子学计算机最佳年龄,孩子学编程最佳年龄是多少

随着IT技术几十年的发展,编程也正变得越来越简单、易用,而不再是那么复杂、繁琐。那么孩子学编程最佳年龄是多少呢?孩子学编程的最佳年龄3-5岁的儿童可以先进行少儿编程语言启蒙,正式学习编程建议在上小学后。国外脑科学实证研究表…

messageformat.format() 自定义参数名_DedeCMS的Java版mcms 第四季之一: 自定义插件

自定义mcms插件包含自定义字典、自定义搜索、自定义模型、自定义表单、自定义页面等功能依赖: Apache Maven<dependency><groupId>net.mingsoft</groupId><artifactId>ms-mdiy</artifactId><version>当前版本</version> </de…

计算机里的网络是什么意思啊,计算机网络中本地站点是什么意思

Dreamweaver 站点提供一种组织所有与 Web 站点关联的文档的方法。通过在站点中组织文件&#xff0c;可以利用 Dreamweaver 将站点上传到 Web 服务器、自动跟踪和维护链接、管理文件以及共享文件。若要充分利用 Dreamweaver 的功能&#xff0c;需要定义一个站点。Dreamweaver 站…

angularjs input标签用一个日期插件后数据不能双向绑定了_微信如何定时发朋友圈?(最方便最好用的办法!)...

微信怎么发朋友圈&#xff08;微信如何定时发朋友圈&#xff09;作为一个运营新媒体的小编&#xff0c;很多情况下&#xff0c;我都会遇到定时发文的情况&#xff0c;对于我来说&#xff0c;定时发文很简单。只要将文案编辑好&#xff0c;使用平台的定时发文功能就可以&#xf…

POI的getLastRowNum() getPhysicalNumberOfRows()区别

// 获得总记录数&#xff08;行数&#xff09;int lastRowNum sheet.getLastRowNum();int rowNumsheet.getPhysicalNumberOfRows();同样的都是获取Excel工作sheet行数的两个方法 getLastRowNum()getPhysicalNumberOfRows()他们的主要区别是&#xff1a; getPhysicalNumberOfR…

java获取当月有几天_腾讯程序员裸辞3个月,转行去送外卖,曝出当月收入网友:又骗我去送外卖...

最近在职业论坛看到这样一个热门的帖子&#xff0c;“腾讯员工裸辞3个月&#xff0c;转行去送外卖&#xff0c;曝出当月收入网友&#xff1a;又骗我去送外卖“到底怎么回事&#xff1f;请往下看。原来一位腾讯员工分享了自己从程序员到外卖员的经历&#xff0c;据男子说在腾讯&…

设置response.setContentType(“application/json;charset=utf-8“)后还是中文乱码

首先是我确认了response.setContentType(“application/json;charsetutf-8”)是设置正确了 代码如下&#xff1a; 找不到头绪&#xff0c;看了一下前端请求头信息&#xff1a; 确定是response.setContentType(“application/json;charsetutf-8”)没有生效&#xff0c;代码是没…

二年级计算机认识键盘教案,关于《认识键盘》的教学反思

关于《认识键盘》的教学反思键盘是计算机最基本、最常用的输入设备&#xff0c;通过键盘接口与主机相连&#xff0c;用户通过按键向计算机输入信息。本课学生学习的是标准的104键键盘&#xff0c;其中3个是Windows专用键。学生已经学习了鼠标操作的能力&#xff0c;在第七课安排…