Closed agoodcoolman closed 1 year ago
排查了,目前自己忘记了再Application的onTerminal中增加close的监听方法。
通过手动修改时间,目前是可以让日志导出正常解析。
如果是类似这种中文乱码,用记事本打开是乱码。用开发工具打开正常。打开的工具的问题。
后台又报这样的错误
[F]decode_log_file.py decompress err, Error -3 while decompressing: invalid stored block lengths
再等它输出一会,我再次导出一个文件,还是这个文件,我再次解压,就正常了。没有报错,估计是还有一部分文件没有flush进去,导致解析的时候头不全。
现在直接解压失败,日志打不开。我服了。
在上传日志文件之前,我想把缓存都写进去,但是只要我在上传文件之前调用 Log.appenderFlushSync(true) 一定会出现以下错误
error: Error -3 while decompressing: invalid stored block lengths
代码: `
val file = File(AndroidSecurityFileUtils.getBigCacheFile(MyApplication.instance()).absolutePath + ".xlog")
// 只要调用了这个方法,一定会报错。谁能告诉我。是不是正在写文件,然后我把文件上传了。但是我直接再从文件中把日志复制出来,同样解压也报错。
Log.appenderFlushSync(true)
if (file.exists()) {
builder.addFormDataPart( "file", file.name, RequestBody.create(
MediaType.parse("application/octet-stream"), file))
} else {
withContext(Dispatchers.Main) {
ToastUtils.show("未发现日志文件,无法为您上传日志文件,请尝试打开文件读取权限")
}
return@launch
}
val sharedPreferences = MyApplication.instance().getSharedPreferences(
SharedpreferenceConstants.CONFIG, Context.MODE_PRIVATE)
val name: String? = sharedPreferences!!.getString(SharedpreferenceConstants.USERNAME, "")
builder.addFormDataPart("account", name)
.addFormDataPart("mobileBrand", android.os.Build.BRAND)
.addFormDataPart("systemVersion", android.os.Build.VERSION.RELEASE)
.addFormDataPart("context", questionContent.get())
.addFormDataPart("softVersion", SystemUtils.getPackageVerionName(
MyApplication.instance()).toString())
val parts = builder.build().parts()
val uploadErrorLog = NetworkService.apiService.uploadErrorLog(parts)
if (uploadErrorLog.getBoolean("success")) {
withContext(Dispatchers.Main) {
ToastUtils.show("上传成功")
finish()
}
} else {
withContext(Dispatchers.Main) {
ToastUtils.show("上报失败")
}
}`
Log.appenderFlushSync(false) Log.appenderFlushSync(true)
Log.appenderFlush()
上传文件之前,调用这三个方法任意一个都有会出现以下问题。
[F]decode_log_file.py decompress err, Error -3 while decompressing: invalid stored block lengths
有没有可能,在调试的过程中,正在写日志,然后我重新跑程序,这个时候会造成日志的损坏?
使用今天更新的包,编译的包。报错以下内容。
[F]decode_log_file.py decompress err, Error -3 while decompressing: invalid stored block lengths [F]decode_log_file.py decode error len=16060, result:_buffer[831196]:0 != MAGIC_NUM_START [F]decode_logfile.py log seq:2-52759 is missing �d#j]� ����=x/�06 � �����$]� ������6,L,� [F]decode_log_file.py decode error len=3676, result:_buffer[847324]:255 != MAGIC_NUM_START [F]decode_log_file.py log seq:52761-39167 is missing [F]decode_log_file.py decode error len=1535, result:_buffer[851075]:255 != MAGIC_NUM_START [F]decode_log_file.py log seq:39169-23138 is missing 3�8[F]decode_log_file.py decode error len=538, result:_buffer[852690]:0 != MAGIC_NUM_START [F]decode_log_file.py log seq:23140-17154 is missing "�S2�2�= gO ���A�#gO ���o<by�� )� [F]decode_log_file.py decode error len=3284, result:_buffer[853344]:0 != MAGIC_NUM_START [F]decode_log_file.py log seq:17156-48877 is missing [F]decode_log_file.py decode error len=3419, result:_buffer[856702]:0 != MAGIC_NUM_START [F]decode_log_file.py log seq:48879-16524 is missing [F]decode_log_file.py decode error len=1594, result:_buffer[860196]:0 != MAGIC_NUM_START [F]decode_log_file.py log seq:16526-4874 is missing
我发现只要有这个出现一定会报错。~ end of mmap ~[14797,14797][2023-05-25 +0800 16:34:37]
后面就会解析不了。
主观认为,我是多进程,因为另外一个进程是百度的。我想着我APplication初始化,我想着我也没用那个打印,应该不影响的。
目前根据不同进程,分别初始化到不同的进程里面。测试看效果。
后续观察,看是否解决了。
果然根源还是咱们使用了多个进程。 我是在Application里面初始化的,启动另外一个进程的时候,也是从这个Application初始化的。由于我没判断,使用了同一个缓存地址,虽然我在第二个进程没有去使用,日志输出。但是这个日志输出框架是自带输出的,然后就导致了问题了。在Application分开后,一天之后是可以用最新的解码脚本解码的。
现象描述:第1天,我把当天日志导出可以正常解析,手机没关。下班未关闭手机。第2天。仅重新跑了一遍程序,导出昨天的日志。解析报错。
是不是前一天的日志没Flush进去昨天的日志里面。然后第二天就有问题。