Meituan-Dianping / Logan

Logan is a lightweight case logging system based on mobile platform.
https://tech.meituan.com/logan_open_source.html
MIT License
5.73k stars 876 forks source link

APP异常关闭,最后一条日志解析失败。异常关闭包括崩溃、强杀等 #190

Open JackyAndroid opened 4 years ago

JackyAndroid commented 4 years ago

@Richard-Cao

我这里也发生了,应用切到后台日志有截断的现象,每次都会发生

app到后台的时候,flush一下

应用被强制杀死,或者其他情况进程被杀死的情况下,也会出现这种异常,请问现在有解决方案吗?

adb shell am force-stop xxx 模拟强制被杀 应用不走任何回调,无法flush,下次在打开应用flush就会出现丢失,100%复现

如果应用被异常杀死,会出导致最后一条日志缺少压缩结束符,导致后端解析时出现截断的现象。目前没有兼容这种情况

引用如上讨论:

  1. “模拟强制被杀,下次在打开应用flush就会出现丢失“(说明mmap cache回写还是不能弥补截断日志)
  2. “应用被异常杀死,导致最后一条日志缺少压缩结束符,导致后端解析时出现截断的现象”

请问崩溃算不算被异常杀死的一种,崩溃不会导致最后一条日志缺少压缩结束符而导致无法解压丢失吗?

崩溃是被异常杀死的一种,所有异常关闭都会导致最后一条日志缺少压缩结束符。

Originally posted by @jiangteng in https://github.com/Meituan-Dianping/Logan/issues/128#issuecomment-573988435

JackyAndroid commented 4 years ago

详情见:#128

JackyAndroid commented 4 years ago

129

jiangteng commented 4 years ago

因为APP异常关闭,会导致日志文件缺少压缩结束符。所以最后一条日志解析不全。

目前建议:

leonsimple commented 4 years ago

能不能通过 把LOGAN_MAX_GZIP_UTIL 设置小点或者为零,来解决问题

0xforee commented 4 years ago

https://github.com/lixiao123/DeLogan 可以尝试在解密的时候做一下兼容,继续向后解密,跳过异常的区域

CGreen11 commented 2 years ago

https://github.com/lixiao123/DeLogan 可以尝试在解密的时候做一下兼容,继续向后解密,跳过异常的区域

wrap.getInt()拿到的数过大,一跳就跳了一大段。 要是每次重启初始化新的文件夹,不接着上次的继续写应该丢的只是有问题的部分吧,然后自己写一个定期删除文件夹的方法