更新记录
1.1.1(2026-09-09) 下载此版本
- 修复 iOS 云打包链接失败(
Undefined symbols for architecture arm64: _mlog_*):根因是 UTS 的 iOS 原生混编仅编译 Swift 源码,src/MSXlogBridge.mm(OC/C++ 桥接)从未参与编译,导致 Swift 侧@_silgen_name引用的 8 个mlog_*C 函数符号缺失。 - 将
MSXlogBridge.mm预编译为 arm64(iphoneos)与 x86_64(iphonesimulator)目标文件,并入Libs/axenxlog/libaxenxlog.a,与 Mars/OpenSSL 实现合为单一自包含静态库。 - 按官方 UTS 插件
.a库目录规范,在Libs/axenxlog/中补充必须的头文件MSXlogBridge.h。 - 验证:arm64 真机(本地离线打包全流程:插件 framework 链接 + 主工程构建 + 插件嵌入)与 DCloud 云打包(Xcode 26.2 云端环境)UTS 插件编译/链接均通过;云打包后续失败仅与签名配置相关(免费个人团队的 Xcode-managed profile 与云打包手动签名不兼容),与插件无关。
- 文档:README iOS 章节重写,说明自包含静态库结构、
.mm不参与云编译的原因与libaxenxlog.a重建步骤。
1.1.0(2026-08-21) 下载此版本
- 鸿蒙端新增
x86_64模拟器 ABI(libs/x86_64/libmarsxlog.so),与arm64-v8a共同覆盖真机与模拟器(HarmonyOS NEXT 仅 64 位,无需 32 位 ABI)。 - 说明:iOS 维持
libaxenxlog.a(arm64 真机 + x86_64 模拟器)方案;Apple Silicon 模拟器需以 Rosetta 运行(DCloud 离线 SDK 的 UTS 基础模块暂未提供 arm64-simulator Swift 模块),待 DCloud SDK 支持后切换 xcframework。
1.0.7(2026-08-21) 下载此版本
- 新增鸿蒙 HarmonyOS 平台支持(uni-app / uni-app x)。
- 新增
utssdk/app-harmony/:UTS 入口 +XlogBridge.ets混编桥接 + NAPI 原生桥接层NapiXlog.cc(注入 Tencent Mars OHOS 构建,产出libmarsxlog.so)。 libmarsxlog.so增加 NAPI 导出:open/write/flush/flushSync/close/setConsoleLog/setMaxFileSize/setMaxAliveTime/getLogDir/getLogFilesJson/cleanExpiredLogs,ArkTS 侧import xlogNative from 'libmarsxlog.so'直接调用。- 鸿蒙默认日志目录
filesDir/xlog/logs、缓存目录cacheDir/xlog/cache;cacheDays默认 0(与 Android 一致,日志直接写入 logDir)。 getLogFilesJson同时扫描 logDir 与 cacheDir(source区分),并过滤 mmap 缓冲文件;原生层自动创建目录并带 hilog 诊断日志(tagMarsXlogNapi)。- 说明:鸿蒙 HAR 不支持携带
.so,使用方需将libmarsxlog.so放入项目harmony-configs/entry/libs/arm64-v8a/(打包时自动打进 HAP)。 - 已在鸿蒙模拟器完成端到端验证:
init → info/error → flush → getLogFilesJson → 文件落盘与列表展示。 - Android 端修复
cacheDays不生效的问题:Xlog.open新增带cacheDays的重载并真正传参,默认 0(日志直接写入 logDir);getLogFiles/cleanExpiredLogs改为同时扫描 logDir 与 cacheDir,与 iOS / 鸿蒙行为对齐。 - 三端
getLogFiles/getLogFilesJson统一过滤 mmap 缓冲文件(.mmap2/.mmap3),仅返回日志文件。
平台兼容性
uni-app(3.8.3)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.7 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.0)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 | 微信小程序 |
|---|---|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.7 | × |
MS-Xlog 高性能日志 - uni-app 本地日志插件
基于 Tencent Mars Xlog 的 uni-app UTS 插件,为 App 提供高性能、低损耗的本地日志能力。
✨ 特性
- 🚀 高性能:基于 Mars Xlog/MMAP 的异步写入,降低主线程影响
- 📦 自动压缩:日志以 Xlog 二进制格式压缩存储
- 🔒 加密支持:可选 RSA 公钥加密日志(未传
pubKey时不加密) - 📂 文件管理:查看日志文件列表、清理过期日志
- 🏷️ 级别过滤:支持 VERBOSE / DEBUG / INFO / WARN / ERROR / FATAL
- 📱 三端支持:Android 真机、iOS(云打包 + arm64 真机 + x86_64 模拟器)、鸿蒙 HarmonyOS(NAPI + libmarsxlog.so)均已验证通过
📦 安装
插件市场搜索 MS-Xlog 或直接导入 uni_modules/axen-uts-xlog。
本插件已通过自研本地验证工具完成 Android 真机 / iOS 真机与模拟器 / 鸿蒙模拟器接入验证与自测,iOS UTS 插件编译链接已在 DCloud 云打包环境(Xcode 26.2)验证通过;如有复杂接入场景,可通过插件市场作者联系方式咨询。
🚀 快速开始
import {
init, info, error, flush, getLogDir, getLogFiles, getLogFilesJson,
XLOG_INFO
} from '@/uni_modules/axen-uts-xlog'
const res = init({
level: XLOG_INFO,
namePrefix: 'myapp',
console: false, // 生产环境建议保持 false
cacheDays: 0, // 0=日志直接写入 logDir(推荐)
maxFileSize: 5 * 1024 * 1024,
maxAliveTime: 24 * 60 * 60,
// pubKey: '...', // 可选:传入后启用 Xlog 加密
})
if (res.success) {
console.log('Xlog 日志目录:', getLogDir())
}
info('Home', '用户进入首页')
error('Pay', '支付失败: ' + JSON.stringify({ code: 1 }))
flush()
const files = getLogFiles()
files.forEach(f => console.log(f.name, f.size))
// iOS/JS 侧推荐使用 JSON 版本,避免数组对象桥接字段丢失
const fileList = JSON.parse(getLogFilesJson())
📖 API 文档
init(config?) / initXlog(config?)
初始化 Xlog,必须先调用。推荐统一使用 init;iOS 标准 UTS 运行时已提供 s_initByJs 兼容别名,内部转发到 initXlog,避免 Swift init 关键字冲突。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| level | number | 2 | 日志级别,建议用 XLOG_VERBOSE / XLOG_DEBUG / XLOG_INFO / XLOG_WARN / XLOG_ERROR / XLOG_FATAL |
| mode | number | 0 | 写入模式:0=异步,1=同步 |
| namePrefix | string | uniapp |
日志文件名前缀 |
| console | boolean | false | 是否同时输出到控制台;生产环境建议关闭 |
| cacheDays | number | 0 | 日志缓存保留天数。Android / 鸿蒙默认 0:日志直接写入 logDir;配置 >0 时日志先写入 cacheDir(保留 cacheDays 天后由 Xlog 自动移入 logDir);iOS 可配合 cleanExpiredLogs(days) 使用 |
| cacheDir | string | - | 自定义缓存目录 |
| logDir | string | - | 自定义日志目录 |
| pubKey | string | - | 加密公钥;为空时不加密 |
| maxFileSize | number | 0 | 单个日志文件最大字节数,0 表示使用 Xlog 默认值 |
| maxAliveTime | number | 0 | 单个日志文件最长存活秒数,0 表示使用 Xlog 默认值 |
返回值 XlogResult:
{ success: boolean, code: number, message: string, data?: UTSJSONObject }
日志写入
verbose(tag, msg)
debug(tag, msg)
info(tag, msg)
warn(tag, msg)
error(tag, msg)
fatal(tag, msg)
log(level, tag, msg)
管理操作
flush() // 强制刷盘(异步)
close() // 关闭 Xlog
getLogDir() // 获取日志目录路径
getLogFiles() // 获取日志文件列表
getLogFilesJson() // 获取日志文件列表 JSON 字符串,iOS/JS 侧推荐使用
setMaxFileSize(bytes) // 设置单个日志文件最大字节数
setMaxAliveTime(seconds) // 设置单个日志文件最长存活秒数
cleanExpiredLogs(days) // 清理 days 天前的日志,返回删除数量
📁 日志存储位置
- Android 默认缓存目录:
filesDir/xlog/cache - Android 默认日志目录:
externalFilesDir/xlog/logs - iOS 默认缓存目录:
Library/Caches/xlog/cache - iOS 默认日志目录:
Documents/xlog/logs - 鸿蒙默认缓存目录:
cacheDir/xlog/cache - 鸿蒙默认日志目录:
filesDir/xlog/logs
getLogFiles() / getLogFilesJson() 返回字段:
{
name: string
path: string
source?: 'logs' | 'cache'
size: number
lastModified: number
}
其中 iOS 会同时扫描 Documents/xlog/logs 与 Library/Caches/xlog/cache;刚写入的活跃日志可能先出现在 cache 目录中,flush 后再落到 logs 目录。三端文件列表均自动过滤 mmap 缓冲文件。
⚠️ 鸿蒙 HarmonyOS 说明
- 鸿蒙实现位于
utssdk/app-harmony/:index.uts(UTS 入口)+XlogBridge.ets(混编 ArkTS,通过 NAPIimport xlogNative from 'libmarsxlog.so'调用原生)+libs/{arm64-v8a,x86_64}/libmarsxlog.so(内置原生库,覆盖真机与模拟器;HarmonyOS NEXT 仅 64 位,无需 32 位 ABI)。 cacheDays默认 0(Android / 鸿蒙一致):日志直接写入logDir;getLogFiles()/getLogFilesJson()会同时扫描logDir与cacheDir(source字段区分logs/cache),并自动过滤 mmap 缓冲文件(.mmap2/.mmap3)。- 若将
cacheDays配置为>0:日志会先写入cacheDir(缓存保留cacheDays天后由 Xlog 自动移入logDir),此时请通过getLogFilesJson()的source字段区分文件来源。 .so打包方式:鸿蒙的 HAR 不支持携带.so,需要将libmarsxlog.so手动放入项目的harmony-configs/entry/libs/<abi>/目录(HBuilderX 会把harmony-configs覆盖到生成的鸿蒙工程),打包时 hvigor 会自动将其打进 HAP 的对应libs/<abi>/。arm64-v8a用于真机、x86_64用于模拟器;插件目录utssdk/app-harmony/libs/内已附带两个 ABI 的库,直接拷贝即可。-
原生库重建:
libmarsxlog.so由 Tencent Mars 的 OpenHarmony 构建产出,并在libraries/mars_ohos_sdk/NapiXlog.cc注入了 NAPI 桥接(open/write/flush/close/setMaxFileSize/setMaxAliveTime/getLogDir/getLogFilesJson/cleanExpiredLogs 等)。如需重新编译:cmake /path/to/mars/mars \ -DCMAKE_TOOLCHAIN_FILE=$OHOS_SDK/native/build/cmake/ohos.toolchain.cmake \ -DOHOS=ON -DOHOS_ARCH=arm64-v8a -DCMAKE_BUILD_TYPE=Release -G Ninja ninja -C build编译产物为
libmarsxlog.so,替换插件utssdk/app-harmony/libs/<abi>/与项目harmony-configs/entry/libs/<abi>/中的同名文件。当前提供arm64-v8a(真机)与x86_64(模拟器)两个 ABI,分别用-DOHOS_ARCH=arm64-v8a/-DOHOS_ARCH=x86_64编译。 - 依赖
libc++_shared.so:鸿蒙应用运行库默认已包含,无需额外配置。
⚠️ iOS 说明
- iOS 原生依赖为
utssdk/app-ios/Libs/axenxlog/libaxenxlog.a(arm64真机 +x86_64模拟器),库内已自包含 Mars Xlog / OpenSSL 实现与mlog_*C 桥接层(MSXlogBridge.mm的预编译产物),HBuilderX 云打包与自定义基座可直接使用,无需任何 OC/C++ 源码参与编译。 Libs/axenxlog/MSXlogBridge.h是 DCloud UTS 插件.a库目录规范要求的头文件,必须与libaxenxlog.a同目录存放,请勿删除或移动。- 重要:UTS 的 iOS 原生混编仅编译 Swift 源码;
src/MSXlogBridge.mm与src/mars/头文件仅作为重建静态库的源码保留,HBuilderX 与云打包不会编译它们。历史版本(≤1.1.0)曾误以为.mm会参与编译,导致云打包链接阶段mlog_*符号全部未定义,1.1.1 起改为预编译进库修复。 - 已完成验证:arm64 真机链接(本地离线打包全流程)、DCloud 云打包 UTS 插件编译与链接(Xcode 26.2 云端环境)、x86_64 模拟器(Rosetta)运行链路。
- Apple Silicon 模拟器需以 Rosetta 运行(DCloud 离线 SDK 的 UTS 基础模块暂未提供 arm64-simulator Swift 模块),待 DCloud SDK 支持后插件可直接切换为 xcframework。
重建 libaxenxlog.a(仅在修改 src/MSXlogBridge.mm 时需要)
cd utssdk/app-ios
SDK=$(xcrun --sdk iphoneos --show-sdk-path)
SIMSDK=$(xcrun --sdk iphonesimulator --show-sdk-path)
# 1. 编译桥接对象(arm64 真机 / x86_64 模拟器)
xcrun -sdk iphoneos clang -x objective-c++ -c src/MSXlogBridge.mm -I src \
-target arm64-apple-ios11.0 -isysroot "$SDK" \
-fobjc-arc -std=gnu++17 -stdlib=libc++ -O2 -o /tmp/bridge-arm64.o
xcrun -sdk iphonesimulator clang -x objective-c++ -c src/MSXlogBridge.mm -I src \
-target x86_64-apple-ios11.0-simulator -isysroot "$SIMSDK" \
-fobjc-arc -std=gnu++17 -stdlib=libc++ -O2 -o /tmp/bridge-x86_64.o
# 2. 并入现有库的两个架构切片(ar r 会替换同名成员,可重复执行)
mkdir -p /tmp/xlog-rebuild/arm64 /tmp/xlog-rebuild/x86_64
cp /tmp/bridge-arm64.o /tmp/xlog-rebuild/arm64/MSXlogBridge.o
cp /tmp/bridge-x86_64.o /tmp/xlog-rebuild/x86_64/MSXlogBridge.o
lipo Libs/axenxlog/libaxenxlog.a -thin arm64 -output /tmp/xlog-rebuild/arm64.a
lipo Libs/axenxlog/libaxenxlog.a -thin x86_64 -output /tmp/xlog-rebuild/x86_64.a
(cd /tmp/xlog-rebuild/arm64 && ar r ../arm64.a MSXlogBridge.o)
(cd /tmp/xlog-rebuild/x86_64 && ar r ../x86_64.a MSXlogBridge.o)
ranlib /tmp/xlog-rebuild/arm64.a /tmp/xlog-rebuild/x86_64.a
# 3. 重新合成胖库并覆盖原库
lipo -create /tmp/xlog-rebuild/arm64.a /tmp/xlog-rebuild/x86_64.a \
-output Libs/axenxlog/libaxenxlog.a
🔐 隐私与安全
本插件只在本地写入日志文件,不主动采集 IDFA、定位、相机、麦克风、相册、通讯录信息,也不主动上传日志。日志内容由业务方传入,可能包含个人信息或敏感数据;请在业务侧避免写入 token、密码、身份证号等敏感内容,生产环境关闭 console,必要时配置 pubKey 加密。
📄 许可证
插件基于 Tencent Mars Xlog(MIT License)。第三方许可见 THIRD_PARTY_LICENSES.md;插件本体授权以插件市场页面/购买协议为准。

收藏人数:
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 44
赞赏 0
下载 12590184
赞赏 1949
赞赏
京公网安备:11010802035340号