android11 添加实时记录logcat日志保存到data目录

软件平台:Android11

硬件平台:高通QCS6125

需求:设备即将上线,需要后台实时采集logcat日志,保存到相应目录下,方便app端上传到服务器,从而分析问题。

改动集中在logcat相关部分:

diff --git a/logcat/logcatd.rc b/logcat/logcatd.rc
index e19554a55..2fcdd2181 100755
--- a/logcat/logcatd.rc
+++ b/logcat/logcatd.rc
@@ -39,7 +39,7 @@ on property:logd.logpersistd.enable=true && property:logd.logpersistd=clear
     setprop persist.logd.logpersistd ""
     stop logcatd
     # logd for clear of only our files in /data/misc/logd
-    exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${logd.logpersistd.size:-256}
+    exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${logd.logpersistd.size:-30}
     setprop logd.logpersistd ""
 
 # stop logcatd service
@@ -52,7 +52,7 @@ on property:logd.logpersistd.enable=false
     stop logcatd
 
 # logcatd service
-service logcatd /system/bin/logcatd -L -b ${logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r ${logd.logpersistd.rotate_kbytes:-2048} -n ${logd.logpersistd.size:-256} --id=${ro.build.id}
+service logcatd /system/bin/logcatd -L -b ${logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r ${logd.logpersistd.rotate_kbytes:-2048} -n ${logd.logpersistd.size:-30} --id=${ro.build.id}
     class late_start
     #disabled
     # logd for write to /data/misc/logd, log group for read from log daemon
diff --git a/logcat/logpersist b/logcat/logpersist
index 05b46f047..f37a0b83d 100755
--- a/logcat/logpersist
+++ b/logcat/logpersist
@@ -21,7 +21,7 @@ log_uid=logd
 log_tag_property=persist.log.tag
 data=/data/misc/logd/logcat
 service=logcatd
-size_default=256
+size_default=30
 buffer_default=all
 args="${@}"

这就实现了开机自启动记录logcat,并且设置了每个logcat文件的大小,和一共报错多少个logcat日志文件。

延伸开发:APP可在发现异常时,主动上传该日志,或者拿到问题设备,将日志取出分析。

### 安卓 Logcat 文件保存路径 在安卓系统中,Logcat 日志文件的保存路径并非固定,具体路径取决于设备制造商和操作系统版本。然而,通常情况下,Logcat 文件可以通过以下几种方式保存到特定目录中。 #### 1. 默认日志存储位置 安卓系统中的 Logcat 日志默认不会自动保存为文件[^1]。日志数据主要存储在内存缓冲区中(由 `logd` 管理),并通过 `logcat` 命令实时读取。如果需要将日志保存到文件,必须手动执行相关命令或配置。 #### 2. 手动保存 Logcat 文件 通过 `logcat` 命令可以将日志输出到指定文件。例如: ```bash adb logcat -d > /sdcard/logcat.log ``` 上述命令会将当前缓冲区中的日志保存到 `/sdcard/logcat.log` 文件中。这里 `/sdcard/` 是 Android 设备上常见的外部存储路径[^3]。 #### 3. 系统级日志保存 某些设备可能内置了系统级的日志保存功能,通常会将 Logcat 日志保存到以下路径之一: - `/data/logs/` - `/data/tombstones/` - `/data/anr/` - `/cache/logs/` 这些路径通常需要 root 权限访问,因为它们位于系统的受保护区域[^2]。 #### 4. 自定义日志保存路径 开发者可以通过编程方式将 Logcat 日志保存到指定路径。例如,在应用程序启动时使用以下代码将日志写入文件: ```java try { Process process = Runtime.getRuntime().exec("logcat -d"); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream())); StringBuilder log = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { log.append(line).append("\n"); } // 将日志保存到文件 File logFile = new File("/sdcard/myapp_log.txt"); FileWriter writer = new FileWriter(logFile); writer.append(log); writer.close(); } catch (IOException e) { e.printStackTrace(); } ``` 上述代码会将当前日志保存到 `/sdcard/myapp_log.txt` 文件中[^3]。 #### 5. 特定场景下的日志保存 在某些特殊场景下(如崩溃报告或调试模式),系统可能会自动将 Logcat 日志保存到以下路径: - `/data/system/dropbox/` - `/data/misc/wifi/logs/` 这些路径同样需要 root 权限访问。 --- ### 注意事项 - 如果设备启用了加密存储,则日志文件可能存储在加密分区中。 - 不同设备和 ROM 可能有不同的日志保存策略,具体路径需根据实际情况确认。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值