跳转至

概述

Version 1.3.4

Tencent/Mars

Tencent/Mars 是微信官方的跨平台跨业务的终端基础组件。其中 xlog 是高可靠性高性能的运行期日志组件。

基于 Tencent/Mars 的 xlog 改造。集成了日志的打印和存储。指定 LogPrinterloggerMarsLogger 即可启用:

// 指定日志的存储位置
val logDir = File(..., "log")
val logCache = File(..., "log-cache")

val logFactory: LogFactory = getLogFactory {
    // 配置插件
    install(LogPrinter) {
        logger = Logger.mars(logDir, logCache)
    }
}

添加依赖

当前版本 version

implementation 'io.github.sakurajimamaii:log-mars:$version'
implementation("io.github.sakurajimamaii:log-mars:$version")

选择合适的 ndk ,目前仅支持 armeabi-v7aarm64-v8a :

ndk { 
    abiFilters.addAll(arrayOf("armeabi-v7a", "arm64-v8a")) 
}

文件写入模式

Version 1.3.4

mars 提供了 mode 用于设置文件写入模式。分为异步和同步,变量定义参考 MarsWriteMode , Release版本一定要用 Async , Debug 版本两个都可以,但是使用 Sync 可能会有卡顿。

文件存储位置

Version 1.3.4

mars 提供了 logdircache 用于设置日志文件存储位置。

文件名前缀

Version 1.3.4

mars 提供了 namePreFix 用于设置日志文件名的前缀,例如该值为 TEST ,生成的文件名为:TEST_20170102.xlog。

单一文件保存

Version 1.3.4

mars 提供了 singleLogFileEveryday 用于设置是否将每天的日志保存在单独的一个文件当中。

单个文件最大大小

Version 1.3.4

mars 提供了 singleLogFileMaxSize 用于设置单个文件的最大大小。

注意事项

singleLogFileEveryday 指定为 false 时该配置会生效。

单个日志文件的存储时间

Version 1.3.4

mars 提供了 singleLogFileStoreTime 用于设置单个文件的存储时间。

缓存时间

Version 1.3.4

我们以上面设置的日志文件夹为例:

val logDir = File(FileMgr.appInternalFilesDir(), "log")
val logCache = File(FileMgr.appInternalFilesDir(), "log-cache")

正常情况下文件结构如下:

├─log-cache
│  └─ log.mmap3
└─ log
   ├─ log_20240620.xlog
   └─ log_20240621.xlog

如果设置了 singleLogFileCacheDays ,日志文件会先存储在 log-cache 目录下,singleLogFileCacheDays 天后移动到 log 文件夹下面。

├─log-cache
│  ├─ log.mmap3
│  ├─ log_20240620.xlog
│  └─ log_20240621.xlog
└─ log

加密秘钥

Version 1.3.4

mars 提供了 pubKey 用于设置日志文件的加密公钥。以下是相关流程:

  • 点击 gen_key.py 下载脚本。
  • 运行 gen_key.py 获取密钥对,将公钥设置为 pubKey

使用提示

如果遭遇 ModuleNotFoundError: No module named 'pyelliptic' 异常,可以执行以下代码进行安装:

pip install https://github.com/mfranciszkiewicz/pyelliptic/archive/1.5.10.tar.gz#egg=pyelliptic

需要注意的是,需要安装 1.5.10 版本的 pyplliptic ,不能安装最新版本的,否则会报类似下面这个错误:

Traceback (most recent call last):
File "decode_mars_crypt_log_file.py", line 9, in <module>
    import pyelliptic
File "C:\Developer\Python2.7.18\lib\site-packages\pyelliptic\__init__.py", line 43, in <module>
    from .openssl import OpenSSL
File "C:\Developer\Python2.7.18\lib\site-packages\pyelliptic\openssl.py", line 309, in <module>
    raise Exception("Couldn't load OpenSSL lib ...")
Exception: Couldn't load OpenSSL lib ...