码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android系统通过属性设置来控制log输出的方案


     Android log相关文档索引:

    使用ADB命令控制logcat日志本地存储功能-CSDN博客

    Android系统通过属性设置来控制log输出的方案-CSDN博客

    Android系统设置kernel log level的方法-CSDN博客

    Android系统通过属性设置来控制log输出的方案

    背景

           项目中经常需要在针对性的模块或者文件,分析问题的时候输出Log,但问题分析完成后,又由于性能问题,需要关闭这些log输出。当前大多数情况下是控制整个系统的log等级来实现,但这种方式会影响到其他模块,输出过多的其他模块的log,并不能使log集中于问题;这需要一种灵活的针对性的log控制方案。

    方案

    通过对问题模块的文件,设置特定的TAG,并关联该TAG到指定的persist属性;系统编译时默认这些属性关闭或者设置较高等级; 需要分析问题时,通过adb shell 调整这些属性;从而达到控制问题模块log输出的目的;

    具体实施步骤

    1、通过Log.isLoggable控制的log属性标签


    例如:R基线中的AccessibilityCache.java中,TAG为:AccessibilityCache

    控制的属性标签为:

    log.tag.AccessibilityCache


    由于该属性不能直接进行保存,所以,需要进行转接,通过persist属性进行控制

    2、可以在系统中任意的rc文件中添加属性配置

    这里我们选择system/core/logcat/logcatd.rc文件,在其中对log.*属性和persist.*属性进行关联

    1. #add for log begin
    2. on property:persist.logd.logpersistd=clear
    3. setprop logd.logpersistd clear
    4. on property:persist.logd.logpersistd=stop
    5. setprop logd.logpersistd stop
    6. on property:persist.log.tag.AccessibilityCache=*
    7. setprop log.tag.AccessibilityCache ${persist.log.tag.AccessibilityCache}
    8. on property:persist.log.tag.GnssLocationProvider=*
    9. setprop log.tag.GnssLocationProvider ${persist.log.tag.GnssLocationProvider}
    10. #add for log end


    3、然后再在system.prop文件中对persist属性设置初始值

    1. #for FW log.tag.*
    2. persist.log.tag.AccessibilityCache=E
    3. persist.log.tag.GnssLocationProvider=E
    4. #Set logd file size 20M
    5. persist.logd.logpersistd.rotate_kbytes=20480

    4、重新编译系统

    5、刷机验证

    至此,编译后的版本,就可以根据需要通过以下两个属性,对AccessibilityCache.java和GnssLocationProvider.java文件中的log进行输出控制

    persist.log.tag.AccessibilityCache
    persist.log.tag.GnssLocationProvider

  • 相关阅读:
    027.Python面向对象_类&方法
    双链笔记软件评测:Roam Research、 Obsidian、Logseq 思源笔记
    LeetCode - 哈希表专题
    国产数据库人大金仓V8
    [正式学习java①]——java项目结构,定义类和创建对象,一个标准javabean的书写
    LeetCode简单题之找到和最大的长度为 K 的子序列
    1800_vim的宏录制功能尝试
    springBoot + Hikari 配置多数据源连接数据库
    如何在IDEA中创建Module、以及怎样在IDEA中删除Module?
    numpy矩阵补全函数 np.pad()
  • 原文地址:https://blog.csdn.net/netwalk/article/details/140331814
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号