android log.d 格式化,Android7.1 logd 日志记录缓冲区大小

一.先看上层

1.1.  布局 KEY

private static final String SELECT_LOGD_SIZE_KEY = "select_logd_size";

private static final String SELECT_LOGD_SIZE_PROPERTY = "persist.logd.size";

1.2. writeLogdSizeOption()

updateLogpersistValues()

private void writeLogdSizeOption(Object newValue) {

boolean disable = (newValue != null) &&

(newValue.toString().equals(SELECT_LOGD_OFF_SIZE_MARKER_VALUE));

String currentTag = SystemProperties.get(SELECT_LOGD_TAG_PROPERTY);

if (currentTag == null) {

currentTag = "";

}

// filter clean and unstack all references to our setting

String newTag = currentTag.replaceAll(

",+" + SELECT_LOGD_TAG_SILENCE, "").replaceFirst(

"^" + SELECT_LOGD_TAG_SILENCE + ",*", "").replaceAll(

",+", ",").replaceFirst(

",+$", "");

if (disable) {

newValue = SELECT_LOGD_MINIMUM_SIZE_VALUE;

// Make sure snet_event_log get through first, but do not override

String snetValue = SystemProperties.get(SELECT_LOGD_SNET_TAG_PROPERTY);

if ((snetValue == null) || (snetValue.length() == 0)) {

snetValue = SystemProperties.get(SELECT_LOGD_RUNTIME_SNET_TAG_PROPERTY);

if ((snetValue == null) || (snetValue.length() == 0)) {

SystemProperties.set(SELECT_LOGD_SNET_TAG_PROPERTY, "I");

}

}

// Silence all log sources, security logs notwithstanding

if (newTag.length() != 0) {

newTag = "," + newTag;

}

// Stack settings, stack to help preserve original value

newTag = SELECT_LOGD_TAG_SILENCE + newTag;

}

if (!newTag.equals(currentTag)) {

SystemProperties.set(SELECT_LOGD_TAG_PROPERTY, newTag);

}

String defaultValue = defaultLogdSizeValue();

final String size = ((newValue != null) && (newValue.toString().length() != 0)) ?

newValue.toString() : defaultValue;

SystemProperties.set(SELECT_LOGD_SIZE_PROPERTY, defaultValue.equals(size) ? "" : size);

SystemProperties.set("ctl.start", "logd-reinit");

pokeSystemProperties();

updateLogdSizeValues();

}

private void updateLogdSizeValues() {

if (mLogdSize != null) {

String currentTag = SystemProperties.get(SELECT_LOGD_TAG_PROPERTY);

String currentValue = SystemProperties.get(SELECT_LOGD_SIZE_PROPERTY);

if ((currentTag != null) && currentTag.startsWith(SELECT_LOGD_TAG_SILENCE)) {

currentValue = SELECT_LOGD_OFF_SIZE_MARKER_VALUE;

}

if (mLogpersist != null) {

String currentLogpersistEnable

= SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_ENABLE);

if ((currentLogpersistEnable == null)

|| !currentLogpersistEnable.equals("true")

|| currentValue.equals(SELECT_LOGD_OFF_SIZE_MARKER_VALUE)) {

writeLogpersistOption(null, true);

mLogpersist.setEnabled(false);

} else if (mLastEnabledState) {

mLogpersist.setEnabled(true);

}

}

if ((currentValue == null) || (currentValue.length() == 0)) {

currentValue = defaultLogdSizeValue();

}

//gatsby 加载res 资源

String[] values = getResources().getStringArray(R.array.select_logd_size_values);

String[] titles = getResources().getStringArray(R.array.select_logd_size_titles);

int index = 2; // punt to second entry if not found

if (SystemProperties.get("ro.config.low_ram").equals("true")) {

mLogdSize.setEntries(R.array.select_logd_size_lowram_titles);

titles = getResources().getStringArray(R.array.select_logd_size_lowram_titles);

index = 1;

}

String[] summaries = getResources().getStringArray(R.array.select_logd_size_summaries);

for (int i = 0; i < titles.length; i++) {

if (currentValue.equals(values[i])

|| currentValue.equals(titles[i])) {

index = i;

break;

}

}

mLogdSize.setValue(values[index]);

mLogdSize.setSummary(summaries[index]);

mLogdSize.setOnPreferenceChangeListener(this);

}

}

二.LogBuffer.cpp

persist.logd.size

persist.logd.size

ro.logd.size

LOG_BUFFER_SIZE, 即256k

LOG_BUFFER_MIN_SIZE, 即64k

三.默认512K

--- a/frameworks/base/packages/SettingsLib/res/values-zh-rCN/arrays.xml

+++ b/frameworks/base/packages/SettingsLib/res/values-zh-rCN/arrays.xml

@@ -62,6 +62,7 @@

"关闭"

"64K"

"256K"

+ "512K"

"1M"

"4M"

"16M"

@@ -76,6 +77,7 @@

"关闭"

"每个日志缓冲区 64K"

"每个日志缓冲区 256K"

+ "每个日志缓冲区 512K"

"每个日志缓冲区 1M"

"每个日志缓冲区 4M"

"每个日志缓冲区 16M"

diff --git a/frameworks/base/packages/SettingsLib/res/values/arrays.xml b/frameworks/base/packages/SettingsLib/res/values/arrays.xml

old mode 100644

new mode 100755

index 920e061..b57115b

--- a/frameworks/base/packages/SettingsLib/res/values/arrays.xml

+++ b/frameworks/base/packages/SettingsLib/res/values/arrays.xml

@@ -122,6 +122,7 @@

32768

65536

+524288

262144

1048576

4194304

diff --git a/system/core/logd/LogBuffer.cpp b/system/core/logd/LogBuffer.cpp

old mode 100644

new mode 100755

index 0497a89..5a2a597

--- a/system/core/logd/LogBuffer.cpp

+++ b/system/core/logd/LogBuffer.cpp

@@ -97,14 +97,20 @@ void LogBuffer::init() {

static const char global_tuneable[] = "persist.logd.size"; // Settings App

static const char global_default[] = "ro.logd.size"; // BoardConfig.mk

+SLOGE("gatsby LogBuffer init");

+

unsigned long default_size = property_get_size(global_tuneable);

+SLOGE("000 gatsby default_size -> %lu .",default_size);

if (!default_size) {

+SLOGE("000 gatsby !!!default_size aaa -> %lu .",default_size);

default_size = property_get_size(global_default);

+SLOGE("000 gatsby !!!default_size bbb -> %lu .",default_size);

if (!default_size) {

default_size = property_get_bool("ro.config.low_ram",

BOOL_DEFAULT_FALSE)

? LOG_BUFFER_MIN_SIZE // 64K

: LOG_BUFFER_SIZE; // 256K

+SLOGE("000 gatsby !!!!!default_size ccc -> %lu .",default_size);

}

}

@@ -116,24 +122,32 @@ void LogBuffer::init() {

snprintf(key, sizeof(key), "%s.%s",

global_tuneable, android_log_id_to_name(i));

+//getprop persist.logd.size

unsigned long property_size = property_get_size(key);

if (!property_size) {

snprintf(key, sizeof(key), "%s.%s",

global_default, android_log_id_to_name(i));

property_size = property_get_size(key);

+SLOGE("111 gatsby global_tuneable -> %s . android_log_id_to_name(i) -> %s .",global_tuneable,android_log_id_to_name(i));

+SLOGE("111 gatsby property_size -> %lu .",property_size);

}

if (!property_size) {

property_size = default_size;

+SLOGE("2222 gatsby property_size -> %lu .",property_size);

}

if (!property_size) {

+//256k

property_size = LOG_BUFFER_SIZE;

+SLOGE("333 gatsby property_size -> %lu .",property_size);

}

if (setSize(i, property_size)) {

+//64k

setSize(i, LOG_BUFFER_MIN_SIZE);

+SLOGE("444 gatsby property_size -> %lu .",property_size);

}

}

bool lastMonotonic = monotonic;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523250.shtml

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

相关文章

Android热修复升级探索——代码修复冷启动方案

摘要&#xff1a; 前面一篇文档&#xff0c; 我们提到热部署修复方案有诸多特点&#xff08;有关热部署修复方案实现&#xff0c; Android热修复升级探索——追寻极致的代码热替换&#xff09;。其根本原理是基于native层方法的替换&#xff0c; 所以当类结构变化时&#xff0c…

maven 常用命令

编译打包跳过测试 mvn install -DskipTests或者 mvn clean install -Dmaven.test.skiptrueMaven出现.lastUpdated结尾的文件问题及解决 for /r %i in (*.lastUpdated) do del %i常用的镜像&#xff1a; 阿里云 <mirror><id>alimaven</id><name>aliy…

K8S精华问答 | 应用和运行时平台是怎样解耦的?

kubernetes&#xff0c;简称K8S&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应…

android放在上个元素的左边代码,控件悬浮在某个控件之上 Android五大布局方式——相对布局(RelativeLayout)属性详解...

如图所示,想要实现搜索框在轮播图上面,不管滑动与否,这个组合控件都在上面1.就要用到RelativeLayout,相对于父元素定位,而且这个搜索框的组合控件必须要放在所有控件下面,在使用android:layout_alignParentTop"true"这个属性,贴紧父元素的上边缘.代码实现RelativeLay…

新功能:在负载均衡SLB控制台上查看DDoS安全防护阈值

摘要&#xff1a; 负载均衡作为业务系统的公网入口&#xff0c;承载海量访问请求的分发&#xff0c;常常也是DDoS攻击的对象&#xff0c;因此阿里云提供了免费的DDoS防护&#xff08;云盾&#xff09;&#xff0c;详情可以参考之前的博文《聊一聊负载均衡SLB的DDoS防护》。 由于…

实战_02_Spring SpringMVC 整合Mybaits

接上一篇&#xff1a;企业实战_01_Spring SpringMVC 整合Mybaits https://blog.csdn.net/weixin_40816738/article/details/101343414 文章目录一、数据库操作1.1. 创建数据库1.2. 表结构二、整合实战2.1. 整合思路2.1.1. Dao层2.1.2. service层2.1.3. Dao层表现层2.2. Dao整合…

自动化测试 之 “好用例、坏用例”

摘要&#xff1a; 自动化测试的重要性显而易见&#xff0c;但自动化测试又无法解决所有问题&#xff0c;所以说完全依赖自动化是不可能的&#xff0c;但完全没有自动化是万万不能。在软件开发项目中&#xff0c;重度依赖人力进行持续回归是一件非常枯燥的重复工作。企业需要花费…

重磅!Python又第一了!网友:为什么找不到好工作?真相让人脸红…

根据第 19 届 KDnuggets调查显示&#xff0c;Python 成数据分析、数据科学与机器学习的第一大语言。图片来源于第 19 届 KDnuggets软件大调查Python 在机器学习中的地位日益扩大&#xff0c;2017 年&#xff0c;机器学习中Python 的使用率超过 50%&#xff0c;今年则直接上升到…

android 语音编码,android – 如何将录制的语音编码为ogg vorbis?

我用android AudioRecord录制了声音,我想将它转换为ogg vorbis,因为它是免专利的.我试过vorbis-java beta,但它似乎不起作用或者我犯了一些错误.这是我的代码&#xff1a;int frequency 44100;int channel AudioFormat.CHANNEL_IN_STEREO;int mAudioSource MediaRecorder.Au…

Apache RocketMQ 深圳沙龙报名开启!

摘要&#xff1a; Apache RocketMQ深圳沙龙报名正式开启。12月16日&#xff0c;Apache RocketMQ将在深圳举办线下沙龙&#xff01;届时&#xff0c;社区里的PMC Member、Committer、深度用户&#xff0c;来自各路的资深专家汇聚一堂&#xff0c;就分布式消息引擎的最佳实践、性…

编程贺卡c语言,C++实现新年贺卡程序

用c应用程序编写的雪花贺卡&#xff0c;逢年过节送给你自己身边的亲友吧snow.cpp///// Snow.cpp// Date: 2009-2-5 21:16// A moving ball./////#include #include "Snow.h"TCHAR strForWin1[] "时间过得好快啊!";TCHAR strForWin2[] "开学已经十周…

震惊!微软小冰公众号被封?示好国内,苹果拟推出特色版iPhone;谷歌更新Google Play支持名单:华为荣耀多款在列……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go AppsFlyer 针对中国移动互联…

如何基于OSS和MTS,快速搭建音视频文件上传服务?

摘要&#xff1a; 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK&#xff0c;快速搭建一个音视频文件上传服务。 优势 使用MTS的上传SDK上传音视频文件&#xff0c;具有以下优势&#xff1a; 增加文件列表管理功能。 增加STS Token 超时更新功能。 背景 本文主要介绍如何基…

IntelliJ IDEA 2019.1 windows找不到文件‘chrome’

文章目录一、问题现象1. 用IntelliJ IDEA 2019.1 打开index.html,抛出以下错误2. 异常效果图二、解决方案&#xff1a;2.1.【打开设置】2.2. 搜索【web brow】2.3. 在桌面上找到google-【右击】-【属性】-【找到目标】-【双击】-【ctrla全选】-【ctrlc复制】2.4. 在红框中&…

新功能:阿里云负载均衡支持HTTP/2、WSS协议

摘要&#xff1a; 很高兴的告诉大家&#xff0c;阿里云负载均衡在欧洲中部&#xff08;法兰克福&#xff09;与亚太东南3&#xff08;吉隆坡&#xff09;地域支持HTTP/2、WSS&#xff08;Web Socket Secure&#xff09;协议。 1、HTTP/2协议支持 什么是HTTP/2 HTTP2是超文本传输…

wds linux,linux 无线组网方式 WDS功能

扩展你的无线网络&#xff1a;使用WDS扩展WDS设置无线分布式系统WDS(Wireless Distribution System)&#xff0c;在无线网络扩展中扮演着最重要的角色&#xff0c;它可以帮你轻松的实现无线到无线的扩展&#xff0c;而中间不必使用任何有线的连接&#xff0c;这在看中美观的家庭…

三十四载Windows崛起之路: 苹果、可视做过微软“铺路石”

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;姜洪军1982年11月的一天&#xff0c;赌城拉斯维加斯客流如织&#xff0c;有常见的闲散赌客&#xff0c;但更多的是来自计算机产业的专业人士&#xff0c;因为计算机领域的重要博览会Comdex在这里举行。27岁的比尔盖…

maven jar下载仓库

下载jar仓库 https://www.kumapai.com/

阿里云CDN直播架构与双11晚会直播实战

摘要&#xff1a; 分享人&#xff1a;阿里云CDN直播 高级技术专家 阙寒分享内容&#xff1a;双11直播活动是众多直播活动中非常典型的场景&#xff0c;离不开直播本身这个话题。所以今天的分享会从直播概述、直播架构、业务功能、直播监控、双11这几个方面来进行。 分享人&…

双11黑科技,阿里百万级服务器自动化运维系统StarAgent揭秘

摘要&#xff1a; 还记得那些年我们半夜爬起来重启服务器的黑暗历史吗&#xff1f;双11期间&#xff0c;阿里巴巴百万量级主机管理能安全、稳定、高效&#xff0c;如丝般顺滑是如何做到的&#xff1f;阿里巴巴运维中台技术专家宋意&#xff0c;首次直播揭秘阿里IT运维的基础设施…