Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【提案】实现可视化的 《日志模块 log.browser.dweb》 #219

Open
Gaubee opened this issue Sep 5, 2024 · 9 comments
Open

【提案】实现可视化的 《日志模块 log.browser.dweb》 #219

Gaubee opened this issue Sep 5, 2024 · 9 comments

Comments

@Gaubee
Copy link
Contributor

Gaubee commented Sep 5, 2024

日志的数据格式:

interface Log {
  scope: string;
  tag: string;
  time: number;
  level: "error" | "warn" | "debug" | "verbose";
}
  1. 日志根据 scope 来作为大类,tag 作为子类
  2. JsConsole 的会进行特殊的适配,会适配成 app-前端 与 app-后端 两部分
  3. 日志默认默认关闭,打开日志应用到时候,会临时打开,用户可以实时看到日志。
  4. 在临时查看日志的模式下,顶部会出现一个横条,提示用户:“当前日志处于临时阅读模式,是否持久化存储?(打开持久化)”
  5. 反之,在持久化模式下,顶部会出现一个横条,提示用户:“当前日志处于持久化模式,会消耗一定的设备资源,是否关闭持久化存储?(关闭持久化)”
  6. 日志界面中,可以对日志持久化进行详细的配置。
    1. 日志默认不做持久化存储,持久化存储,默认存储到缓存目录下。
    2. 日志按日期存储,一个文件中超过 10000 行后,自动切分出下一个文件
      1. 默认对日志文件启用 br 压缩,在文件切出来后,这个文件就固定下来了,这时候就可以 br 压缩后再存储
    3. 默认保存 3 天的日志,用户可以手动修改日志存储的上限,有两种模式:按时间、按空间
    4. 日志可以做下载,那么就是走 download.browser.dweb 模块来进行下载,下完后就是在用户设备的 download 目录,是一个 zip 文件
    5. 持久化的日志存储是存储在模块的 file:///data/logs/launch-[应用启动时间]/
    6. 日志可以做导入,选择指定的 zip 来导入。导入的日志是解压在 file:///data/logs/import-[日志导入时间]-launch-[应用启动时间]/
  7. 日志界面中,会有一个日志查看器
    1. 日志查看器上边是 tag 面板,可以锁定 tag 来并排展示多个 tag,过长的 tag 滚动显示,这些 tag 可以拖动排序
    2. 日志查看器的中间是日志详情 detail,按从上往下前进时间
    3. 日志的左上角是一个菜单,打开后是一个面板,可以选择日志文件夹,或者导入日志成文件夹
    4. 日志的左边是一个 scope 面板,可以选择不同的 scope,过长的 scope 滚动显示,选中的 scope 会置顶,这些 scope 按照选中的顺序来排序显示
    5. 日志的左下角是一个“切分”按钮,可以横向再切分出一个 scope 同时显示,相对应的也会有独立的 tag、detail
    6. 日志的下边是一个时间轴,时间轴是一个 range-slider 组件,可以精细地调控时间范围,或者 live 模式,可以暂停,可以播放
    7. 日志查看器的右上角是类型面板,可以选择不同的 level,level 上有角标,统计相关类型的行数
    8. 日志查看器的右下角是操作面板,可以放大缩小字体,还有“搜索”按钮,还有一个“设置”的入口
      1. 搜索面板中可以配置搜索条件,可以启用正则,可以选择“高亮模式”或者“过滤模式”
      2. 设置面板中主要是关于持久化存储的配置
      3. 还有一个是保存、导入、导出面板布局,可以在这里切换面板布局,面板布局是一个 json,可以直接复制到剪切板,或者导出下载成 json。

        这里的布局都是百分比布局

注意事项

  1. 日志的收集是应用开启阶段就要开始的,所以此时先暂存在内存中,等日志模块启动后,再插入替换适配器,转储到日志模块中去。
  2. 如果能收集到应用日志,那么需要在下一次启动的时候,将崩溃日志回写到上一个启动日志记录去。

    提到这点,只是要注意,模块设计的日志写入时的接口的友好性

    1. 目前 ios 和 android 都没有关于崩溃日志记录相关的接口
    2. 但是 android 可以这样做来间接处理日志:
      1. android 的崩溃日志需要基于 adb
      2. adb 可以无线
      3. 所以可以在应用内部启动一个 adb-serveer
      4. 然后将链接给到用户,让用户自己去开发者面板中填入
      5. 从而我们的应用获得了 adb 的远程操作权限
    3. 崩溃日志的作用主要是给测试团队一个脱离 pc,能在生活中使用时收集崩溃信息的方式。
@Gaubee
Copy link
Contributor Author

Gaubee commented Sep 5, 2024

如果可以,类型加入crash类型的日志,但目前应用崩溃之前的错误捕捉该如何做,是一个需要调研的问题

@kingsword09
Copy link
Contributor

kingsword09 commented Sep 12, 2024

adb 调试(有待验证):

  1. Android端:dadb
    dadb 可以做到直连安卓设备,不需要adb-server
    目前已经在生产环境有使用,maestro这个UI自动化测试库也有使用

  2. iOS端: adb-mobile
    adb移植到了移动端

@jackie-yellow
Copy link
Contributor

jackie-yellow commented Sep 26, 2024

Klogging : https://klogging.io/docs/get-started/

@kingsword09
Copy link
Contributor

Klogging : https://klogging.io/docs/get-started/

这个target只有jvm,没用吧

@Gaubee
Copy link
Contributor Author

Gaubee commented Sep 29, 2024

Klogging : https://klogging.io/docs/get-started/

这个target只有jvm,没用吧

基本上得我们自己做,但是做之前,需要充分地调查研究业内其它的竞品。
了解它们解决了什么问题,使用了什么技术,这样对于我们自己的需求定位、未来发展都很重要。

有其它什么类似的开源项目也都发一下,最好别只发一个链接,最好附带上一些观点见解。最好是有对比、以及本质的挖掘与思考。

@kingsword09
Copy link
Contributor

kingsword09 commented Sep 29, 2024

stream-log

  1. 具备基础的 taglevel优先级 功能,未设置 tag 默认是当前类名;
  2. 具备输出日志到外部文件的能力;
  3. 而且可以结合adb使用;
  4. 易于扩展,可以自定义输出格式;
  5. 支持 KMP(Android、iOS、JVM);
  6. 已经有大量生产环境的使用。

最吸引我的是与adb功能的结合,看起来似乎可以结合上面提到的在 android 中起一个 adb server,然后通过远程 adb 操控时做日志记录,有利于调试,并且可以调用分享功能,如果结合邮件发送过来也是个不错的选择。

@kingsword09
Copy link
Contributor

Kermit

  1. 支持KMP(Android、iOS、JVM);
  2. 可用于测试;
  3. 支持 Crash 日志记录。

但是在 leveltag 的支持上不是很好,基本只有 Android 端支持比较完整。

比较吸引人的是 Crash 日志的收集,官方提供的是 FirebaseCrashlytics两种方案,都属于需要注册的平台,我们可以借鉴的是如何收集Crash

@kingsword09
Copy link
Contributor

Rebugger

一个适合在开发阶段使用的日志,用在 Compose Multiplatform 中,可以在 logcat 中打印 Composable recomposition 的原因,日志模块加上这种开发阶段调试使用的日志,应该有组于提升开发效率。不过出了强跳过模式之后,这个需求还有必要吗?感觉可能适用于之前recomposition出问题的时候排查异常。

@kingsword09
Copy link
Contributor

基本上市面上的 Crash 日志都使用以下两种SDK方式:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants