当前位置: 首页 > backend >正文

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

//xx_log.h
#ifndef __XX_LOG_H__
#define __XX_LOG_H__#include <log/log.h>#define NDEBUG 0#endif
//devices/EmulatedSensor/hwl/EmulatedSensor.cpp
#include "xx_log.h"...

方法2

//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
//devices/EmulatedSensor/hwl/EmulatedSensor.cpp
#include "xx_log.h"...

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

3.[操作]动态设置logLevel

$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看到)

$adb shell setprop persist.log.tag.EmulatedSensor V

http://www.xdnf.cn/news/9239.html

相关文章:

  • vue2使用el-tree实现两棵树间节点的拖拽复制
  • LeetCode 2894.分类求和并作差:数学O(1)一行解决
  • Java提取markdown中的表格
  • go并发与锁之sync.Mutex入门
  • 国11阶乘约数-质因数分解
  • C/C++的OpenCV的锐化
  • vue 前端请求跨域解决办法
  • 九级融智台阶与五大要素协同的量子化解析
  • MGAug:图像变形潜空间中的多模态几何增强|文献速递-深度学习医疗AI最新文献
  • 端口 3389 服务 ms - wbt - server 漏洞修复方法
  • 你的网站真的安全吗?如何防止网站被攻击?
  • 联软科技统一安全工作空间:零信任架构下的远程办公数据安全守护者
  • 每天掌握一个Linux命令 - sqlite3
  • EasyRTC嵌入式SDK音视频实时通话助力WebRTC技术与智能硬件协同发展
  • Nginx 配置文件深度解析:从核心模块到扩展机制
  • WPF【11_4】WPF实战-重构与美化(MVVM 架构)
  • 【elasticsearch 7 或8 的安装及配置SSL 操作指引】
  • 【Doris入门】Doris初识:分布式分析型数据库的核心价值与架构解析
  • 关于空调温度控制仿真模型的详细技术文档,包含数学模型、Python实现和系统分析
  • 引导者之歌------------嵌入式软件面试问题集成
  • 修改SpringBootApplication类的入参后,引用外部yml的启动命令要修改
  • ArcGIS Pro 3.4 二次开发 - 地理处理
  • 计算机网络练习题
  • 自动生成提示技术突破:AUTOPROMPT重塑语言模型应用
  • Java+Playwright自动化-2-环境准备与搭建-基于Maven
  • Jenkins实践(9):pipeline构建历史展示包名和各阶段间传递参数
  • C++:设计模式--工厂模式
  • linux安装MYSQL
  • 图论学习笔记 5 - 最小树形图
  • leetcode hot100刷题日记——22.只出现一次的数字