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.pswp.cn/diannao/84667.shtml

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

相关文章

C++:设计模式--工厂模式

更多内容&#xff1a;XiaoJ的知识星球 目录 1.简单工厂模式1.1 简单工厂1.2 实现步骤1.3 实现代码1.4 优缺点 2.工厂模式2.1 工厂模式2.2 实现步骤2.3 实现代码2.4 优缺点 3.抽象工厂模式3.1 抽象工厂模式3.2 实现步骤3.3 实现代码3.4 优缺点 1.简单工厂模式 . 1.1 简单工厂 …

【DSP笔记】掌握数字世界的律动:时域离散信号与系统基础

掌握数字世界的律动&#xff1a;时域离散信号与系统基础 想象一下&#xff0c;你用手机拍了一张照片&#xff0c;或者听了一首MP3歌曲。这些图片和声音&#xff0c;原本都是连续变化的模拟信号&#xff0c;但为什么它们能被你的手机存储和处理呢&#xff1f;秘密就在于“数字化…

织梦dedecms上传附件不自动改名的办法

织梦dedecms的系统在上传附件后&#xff0c;会将文件自动改名字&#xff0c;那怎么样才能让附件上传后不自动改名字呢&#xff0c;让附件上传后不自动改名字(中文名的附件将会改成拼音文件名称)&#xff0c;现在说一下方法吧&#xff1a; 我们打开网站目录下include\dialog\se…

https下git拉取gitlab仓库源码

git init 创建仓库 参考下面创建公私秘钥对 GitLab配置ssh key - 阿豪聊干货 - 博客园 Your identification has been saved in /home/xxx/.ssh/id_ed25519 Your public key has been saved in /home/xxx/.ssh/id_ed25519.pub 然后查看对应公钥&#xff0c;复制 cat ~/.ss…

Mybatis使用update更新值为null时不生效问题解决

1.出现的问题 前端修改数据时把属性内容删除然后进行保存&#xff0c;默认传的null&#xff0c;后端更新时属性值为null&#xff0c; 然后调用updateById进行更新时发现该属性还是原来的值&#xff1a; update方法不会对属性null的进行更新 2.原因 mybatis-plus FieldStrat…

JAVA 学习日志

$2 周期小结 #8 工作汇报 数学建模部分 前三天的主要精力用在电工杯数学建模大赛上了&#xff0c;虽然这是Java学习笔记 当是还是总结一下吧 首先是任务分工方面 需要三个人都会python基础语法 然后一起写论文 &#xff0c;就是需要边建模边写论文 &#xff0c;然后在 后续…

Java网络编程性能优化

1.网络编程性能优化基础 1. 性能关键指标 指标 描述 优化目标 响应时间 从请求到响应的总时间 降低到毫秒级 吞吐量 单位时间内处理的请求数量 提高到每秒数千至数万请求 并发用户数 系统同时处理的用户数量 支持数千至数万并发连接 资源利用率 CPU、内存、网络带…

react native搭建项目

React Native 项目搭建指南 React Native 是一个使用 JavaScript 和 React 构建跨平台移动应用的框架。以下是搭建 React Native 项目的详细步骤&#xff1a; 1. 环境准备 安装 Node.js 下载并安装 Node.js (推荐 LTS 版本) 安装 Java Development Kit (JDK) 对于 Androi…

Redis 容器启动失败Fatal error loading the DB, check server logs. Exiting.的解决方法

❗ 问题分析&#xff1a;Redis 容器启动失败 根据提供的 Redis 启动日志&#xff0c;关键信息如下&#xff1a; &#x1f50d; 模块加载情况 模块名称状态备注RedisCompat✅ 成功search✅ 成功RediSearch 模块timeseries✅ 成功RedisTimeSeries 模块ReJSON✅ 成功bf✅ 成功R…

chrome打不开axure设计的软件产品原型问题解决办法

1、打开原型文件夹&#xff0c;进入到其中的如下目录中&#xff1a;resources->chrome->axure-chrome-extension.crx&#xff0c;找到 Axure RP Extension for Chrome插件。 2、axure-chrome-extension.crx文件修改扩展名.rar&#xff0c;并解压到文件夹 axure-chrome-ex…

Java 各版本核心新特性的详细说明

一、Java 8&#xff08;2014&#xff09;—— 函数式编程的里程碑 1. Lambda 表达式 作用&#xff1a;简化匿名内部类&#xff0c;支持函数式编程。示例&#xff1a;// 传统匿名内部类 Runnable r1 new Runnable() {Overridepublic void run() {System.out.println("He…

【md2html python 将 Markdown 文本转换为 HTML】

测试md文本 md_text """ # title## subtitle\python print("Hello, World!") \- item 1| Header 1 | Header 2 | |----------|----------| | Row 1 Col 1 | Row 1 Col 2 |- item 2> This is a blockquote.### SubsubtitleThis is a paragraph wi…

Prompt Engineering 提示工程介绍与使用/调试技巧

1. 介绍 Prompt Engineering 是一种人工智能&#xff08;AI&#xff09;技术&#xff0c;它通过设计和改进 AI 的 prompt 来提高 AI 的表现。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统&#xff0c;使其能够准确、可靠地执行特定任务。 如果你从来没有使用过Pr…

如何把 Microsoft Word 中所有的汉字字体替换为宋体?

Ctrl H &#xff0c;然后&#xff0c;点击更多&#xff0c;勾选使用通配符&#xff0c;查找内容中填入 [一-龥]{1,}&#xff0c; 这是 Word 通配符匹配汉字的经典写法&#xff08;匹配 Unicode 范围内的 CJK 汉字&#xff09;。 然后&#xff0c; “替换为”留空&#xff0c;点…

CMake从入门到实战:现代C++项目构建指南

CMake从入门到实战&#xff1a;现代C项目构建指南 引言 在跨平台开发成为主流的今天&#xff0c;CMake作为开源构建系统的标杆工具&#xff0c;凭借其跨平台性、灵活性和可扩展性&#xff0c;已成为C/C项目的事实标准。本文将带你系统掌握CMake的核心机制&#xff0c;通过实战…

Web安全渗透之长城杯夺旗赛

Web-Git flag1 扫描WEB目录发现存在Git泄露&#xff08;这里是队友扫的&#xff0c;我这图是拿的我后面扫的截图&#xff0c;所以时间对不上。 使用GitHub - gakki429/Git_Extract: 提取远程 git 泄露或本地 git 的工具拉取泄露代码。 读取到flag&#xff0c;全场一血捏。…

机器学习与深度学习:区别与联系

机器学习与深度学习&#xff1a;区别与联系 在人工智能领域&#xff0c;机器学习和深度学习是两个最热门的概念&#xff0c;它们既相互关联又有所区别。本文将深入探讨这两者的核心差异与内在联系&#xff0c;帮助读者更好地理解它们在实际应用中的定位。 一、基本概念 **机…

Linux TCP与Socket与IO多路复用(Epoll)

目录 一、背景 二、交互流程 2.1 数据流动 2.2 对象之间的关系 三、TCP 3.1 为什么需要三次握手 3.2 三次握手流程 3.3 三次握手后的产物 3.4 TCB 四、Socket 4.1 Java Socket和C Socket 4.2 Socket的本质 4.3 Socket和TCB的关系 4.4 通过文件描述符调用Socket的…

字节跳动旗下火山引擎都覆盖哪些领域

首先&#xff0c;我需要确认火山引擎的主要业务范围。根据之前的资料&#xff0c;火山引擎是字节跳动的企业技术服务平台&#xff0c;可能包括云服务、人工智能、大数据分析等。不过需要更详细的信息&#xff0c;比如具体的产品和服务&#xff0c;覆盖的行业等。 接下来&#x…

如何配置jmeter做分布式压测

问&#xff1a;为何需要做分布式 答&#xff1a;当我们本地机器jmeter进行压测时&#xff0c;单台JMeter机器通常无法稳定生成2000 QPS&#xff08;受限于CPU、内存、网络带宽&#xff09;&#xff0c;本地端口耗尽&#xff1a;操作系统可用的临时端口&#xff08;Ephemeral P…