1、日志接口
日志接口内容,共分为java层、native层、kernel层等。下面就对每个层级的内容分别进行介绍。
1.1 java层调用接口
日志级别分别为verbose、debug、info、warn、error、assert,日志级别依次提升。默认定义了5个buffer缓冲区,分别是main、radio、events、system、crash,对应的id信息分别为log_id_main、log_id_radio、log_id_events、log_id_system、 log_id_crash。
1.1.1 日志缓冲区简介
android日志记录系统守护进程logd维护的一组结构化环形缓冲区,这组可用的缓冲区是固定的,且由系统定义。也可以通过logcat 命令查看如下缓冲区。
radio: 查看包含无线装置/电话相关消息的缓冲区,可以调用android.telephony.rlog打印日志。
events: 查看经过解译的二进制系统时间缓冲区信息,类型为events的日志是用来诊断系统问题的。在应用框架提供了android.util.eventlog接口通过liblog动态库往日志驱动程序中写入日志,运行时库提供了宏log_event_int、log_event_long、log_event_float、log_event_string用来写入events类型日志。
main: 查看主日志缓冲区信息,main日志缓冲区是应用程序唯一可用的日志缓冲区,在应用框架中提供了android.util.log接口通过liblog动态库往日志驱动程序中写入日志,运行时库提供了logv、logd、logi、logw、loge等宏用来写入main类型的日志。
system: 查看系统缓冲区类型为system的日志,在应用框架提供了android.util.slog接口通过liblog动态库往日志驱动程序中写入日志,运行时库提供了slogv、slogd、slogi、slogw、sloge等宏用来写入system类型的日志。
crash: 查看崩溃日志缓冲区的日志信息。
1.1.2 命令查看缓冲区日志信息
ogcat -b + 参数查看对应缓冲区内容,具体见如下内容。
all :查看所有缓冲区日志
default :查看main、system、crash三个缓冲区日志信息
比如:logcat -b main用来查看main缓冲区信息;logcat -b main,system用来查看main和system缓冲区信息;logcat -b all 查看所有缓冲区信息。
1.2 native层接口调用
原生系统日志接口封装在liblog.so库中,供native层代码调用。最终通过socket的通信方式将日志写入logd的buffer中。具体调用过程需要引入liblog动态库,然后才能调用如下native层的日志接口__android_log_print,很多内容都封装成alogx的接口,具体内容可参考如下所示:
#define alogv(...) __android_log_print(android_log_verbose, log_tag, va_args )
#define alogd(...) __android_log_print(android_log_debug , log_tag, va_args )
#define alogi(...) __android_log_print(android_log_info , log_tag, va_args )
#define alogw(...) __android_log_print(android_log_warn , log_tag, va_args )
#define aloge(...) __android_log_print(android_log_error , log_tag, va_args )
1.3 kernel层调用接口
经常使用的接口是printk,具体用法如下:
printk(kern_info n); //kern_info为日志级别,n则为日志信息。
日志级别信息如下:
kernel日志级别分别是:kern_emerg,kern_alert,kern_crit,kern_err,kern_warning,kern_notice,kern_info,kern_debug
原生代码kern_levels.h中定义如下
#define kern_emergkern_soh 0/* system is unusable */
#define kern_alertkern_soh 1/* action must be taken immediately */
#define kern_critkern_soh 2/* critical conditions */
#define kern_errkern_soh 3/* error conditions */
#define kern_warningkern_soh 4/* warning conditions */
#define kern_noticekern_soh 5/* normal but significant condition */
#define kern_infokern_soh 6/* informational */
#define kern_debugkern_soh 7/* debug-level messages */
日志输出到/proc/kmsg节点,用户可以通过cat节点信息获取kernel日志信息。
一种360°全景定制的Transformer框架
BOE(京东方)隆重召开创立30周年庆典大会“屏之物联”再谱高质量发展华章
聆心智能联合清华大学CoAI实验室共同发布大模型安全评估框架,迈向可控可信的大模型
SNEC2023丨领先光储方案背后的力量:安森美助力新能源产业加速崛起
自动驾驶规控决策方面的建议与解决方案
Android开发中的日志接口介绍
你了解步进阶梯指令吗?
失真,什么叫失真?
MS1824多功能视频处理器芯片的方案应用案例
一文告诉你什么是电机短时运行?
iPhone 10的多点触控技术带了全新的体验
AiP技术扩展了毫米波雷达的应用
上海电信携手徐汇区,发布人工智能公共算力服务产品,拟建算力平台
ROS完成ROS和ROS2中各个组件向openEuler的适配
关于高功率纳秒脉冲光纤激光器模块介绍
一加7渲染图曝光 Pro版采用弹出式前摄
变频器丰富的外部端子功能,你了解多少呢?
怎样在树莓派上安装和设置Shinken网络监视器
日本家用美容仪人气十足,来看看 哪些是必买品!
先进的拉曼光谱技术