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

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://archimedes.lbooon.cn
http://attu.lbooon.cn
http://boughten.lbooon.cn
http://carcinogen.lbooon.cn
http://anthropotomy.lbooon.cn
http://calycoideous.lbooon.cn
http://anisogamete.lbooon.cn
http://bicky.lbooon.cn
http://chess.lbooon.cn
http://buzzer.lbooon.cn
http://chloasma.lbooon.cn
http://ceaselessly.lbooon.cn
http://bilsted.lbooon.cn
http://augural.lbooon.cn
http://bootlick.lbooon.cn
http://affray.lbooon.cn
http://animism.lbooon.cn
http://abel.lbooon.cn
http://antifertilizin.lbooon.cn
http://animation.lbooon.cn
http://cabezon.lbooon.cn
http://caveator.lbooon.cn
http://acrogenous.lbooon.cn
http://bladderwort.lbooon.cn
http://androgen.lbooon.cn
http://bleat.lbooon.cn
http://chiliarch.lbooon.cn
http://catkin.lbooon.cn
http://campanile.lbooon.cn
http://capitalisation.lbooon.cn
http://www.dtcms.com/a/215719.html

相关文章:

  • Android 15 控制亮屏灭屏接口实现
  • Cherry Studio连接配置MCP服务器
  • Android 启动优化
  • Python os 模块简介及基础使用示例
  • 在PyTorch中,对于一个张量,如何快速为多个元素赋值相同的值
  • 【笔记】解决ImportError: cannot import name ‘Iterable‘ from ‘collections‘
  • 【会议推荐】2025年模式识别与大数据国际会议(PRBD 2025)
  • 华为认证中HCIA/HCIP/HCIE是什么等级?怎么考试?
  • #跟着Lucky学鸿蒙# HarmonyOS NEXT 工程介绍
  • ES 在大查询场景下导致 GC 频繁,如何定位和解决?
  • 用 Python 打造你的专属虚拟试衣间!——AI+AR 如何改变时尚体验
  • 模型评价指标介绍
  • emqx、MongoDB或者java程序,出现 Too many open files 问题
  • Flink系列文章列表
  • 自动化测试入门:解锁高效软件测试的密码
  • DAY 38 Dataset和Dataloader类
  • 判断元素是否获取焦点
  • 英码科技携带 “无感知AI数字课堂”解决方案,亮相第22届广东教育装备展
  • 哈希算法:原理、应用、安全演进与推荐
  • 计算机网络学习20250527
  • 科技趋势分析系统(BBC)技术全解
  • 【数据结构】树形结构--二叉树
  • 【数据结构】 时间复杂度
  • 安卓学习笔记-声明式UI
  • 如何通过ETL对WebService进行调用
  • 《算法和数据结构》算法篇
  • 数据结构-散列表查找(哈希表)
  • qt之开发大恒usb3.0相机二
  • (1)课堂 1--5,这五节主要讲解 mysql 的概念,定义,下载安装与卸载
  • div或button一些好看实用的 CSS 样式示例