Android15 Camera Hal设置logLevel控制日志输出

这里说明三个内容

  • Camera Hal Demo默认使用的也是Android原生日志接口(例如:ALOGD, ALOGV),为什么logLevel设置为V级别,但是通过ALOGV打印的日志不输出,不生效
  • Camera Hal Demo在不修改ALOGX接口使用的情况下,使logLevel对ALOGV生效
  • Camera Hal Demo logLevel怎么设置

接下来以Google Camera Hal (Aidl)为例子进行分析说明。

1.logLevel V对Camera Hal Demo ALOGV不生效

理论上ALOGV和ALOGD、ALOGI、ALOGW、ALOGE、ALOGF这些接口应该是类似的,是log模块提供的不同log level的输出接口。

对于通过ALOGD,ALOGI输出的log,可以通过修改logLevel prop来动态修改以控制是否输出,而ALOGV输出的log不能通过logLevel prop打开。因为Camera Hal中使用的ALOGV被LOG_NDEBUG宏开关单独控制,如下

2.不修改ALOGX使用接口的情况下使logLevel对ALOGV生效

这里介绍两种方法:

  1. 在一个头文件中定义LOG_NDEBUG 0, 然后在想要调用ALOGV受logLevel控制的.cpp中包含这个头文件。
  2. 创建自己的xx_log.h, 在这个文件中调用__android_log_print()重新实现ALOGV

方法1

cpp 复制代码
//xx_log.h
#ifndef __XX_LOG_H__
#define __XX_LOG_H__

#include <log/log.h>

#define NDEBUG 0

#endif
cpp 复制代码
//devices/EmulatedSensor/hwl/EmulatedSensor.cpp
#include "xx_log.h"

...

方法2

cpp 复制代码
//xx_log.h
#ifndef __XX_LOG_H__
#define __XX_LOG_H__

#include <log/log.h>

#undef ALOGV
#define ALOGV __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)

#endif
cpp 复制代码
//devices/EmulatedSensor/hwl/EmulatedSensor.cpp
#include "xx_log.h"

...

这种方法修改好处是,将来如果需要指定LOG_TAG也可以修改。

3.[操作]动态设置logLevel

bash 复制代码
$adb shell setprop persist.log.tag.tagX logLevel

使用说明:

  • tagX是具体的LOG_TAG, 例如android15 Camera Hal Demo中的EmulatedSensor.cpp中的日志,默认LOG_TAG是EmulatedSensor。
  • logLevel是每个level的缩写,对于大于等于这个logLevel的日志能被输出。logLevel缩写有(从小到大):
    • V - Verbose
    • D - Debug
    • I - Info
    • W - Warn
    • E - Error
    • F - Fatal
  • 通过persist.log.tag.tagX设置的logLevel是永久性的(即设备重新上电后保留上次的设置)

使用例子:为EmulatedSensor这个LOG TAG设置V级别日志输出(也就是说通过ALOGV, ALOGD, ALOGI, ALOGW, ALOGE, ALOGF这些接口调用打印的日志都能输出,通过logcat看到)

bash 复制代码
$adb shell setprop persist.log.tag.EmulatedSensor V
相关推荐
Lotay_天天1 小时前
Android 缓存应用冻结器(Cached Apps Freezer)
android·缓存
wzj_what_why_how2 小时前
从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理
android
雪饼android之路2 小时前
Building Android Kernels with Bazel
android
笔沫拾光2 小时前
Flutter 与 Android 原生布局组件对照表(完整版)
android·flutter·widget·android布局
安全系统学习3 小时前
网络安全之XSS漏洞
android·前端·安全·web安全·网络安全·中间件
小蜜蜂嗡嗡3 小时前
flutter简单自定义跟随手指滑动的横向指示器
android·javascript·flutter
Rainly20004 小时前
AWS 创建VPC 并且添加权限控制
android·java·intellij-idea
User_芊芊君子5 小时前
C语言循环结构实战:while和for到底用哪个?
android·c语言·数据库
爱编码的傅同学7 小时前
Linux中的权限概念
android·java·linux
AFinalStone7 小时前
Android 16系统源码_自由窗口(一)触发自由窗口模式
android