更新记录

1.0.3(2026-02-11)

新增功能

  • 日志文件按小时切分initLog(LOG_FILE_MODE_HOUR),按小时时文件名为 log_yyyy-MM-dd_HH.log(如 log_2026-02-11_12.log
  • initLog 可选参数initLog(logFileMode?),不传或传 LOG_FILE_MODE_DAY(0) 按天,传 LOG_FILE_MODE_HOUR(1) 按小时;移除独立方法 setLogFileMode
  • 指定文件上传uploadFile(filePath, options, uploadFileName?, onCallback?),上传指定本地文件
  • 指定文件夹压缩上传uploadFolder(folderPath, options, onCallback?),将指定目录打包为 zip 后上传
  • iOS 端支持:新增 app-ios(Swift),与 Android/鸿蒙保持同一套 API
  • 导出常量 LOG_FILE_MODE_DAYLOG_FILE_MODE_HOUR,便于传入 initLog

问题修复

功能优化

  • 鸿蒙、iOS 与 Android 对齐:支持按天/按小时日志命名及清理、上传时的日期解析(含 log_yyyy-MM-dd_HH.log 格式)
  • 文档:readme 补充平台说明、方法表、IUpload/IReturn、快速开始与按小时示例

1.0.2(2026-02-06)

新增功能

  • 上传日志时可自定义文件后缀,避免服务不支持
  • 新增鸿蒙版的支持

问题修复

功能优化

1.0.1(2026-01-07)

新增功能

问题修复

功能优化

  • 优化了系统日志自主收集行为的日志记录
查看更多

平台兼容性

uni-app(4.76)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android Android插件版本 iOS 鸿蒙 鸿蒙插件版本
- - × × - - 5.0 1.0.0 - 1.0.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × - × ×

uni-app x(4.76)

Chrome Safari Android Android插件版本 iOS 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 1.0.0 - 1.0.2 ×

其他

多语言 暗黑模式 宽屏模式
× ×

ima-log 应用日志收集与上报

UTS 插件,支持自动 + 主动收集应用日志,支持按天/按小时切分日志文件,支持上传到自有服务器。

能力概览: 自动收集应用日志(含生命周期、崩溃)、设置用户/标签、记录各级别日志、获取/清理本地日志、上传日志(多文件/压缩包)、指定文件上传指定文件夹压缩上传

支持平台: Android、iOS、鸿蒙(HarmonyOS)


日志文件命名

  • 按天(默认)log_yyyy-MM-dd.log,如 log_2026-02-11.log
  • 按小时log_yyyy-MM-dd_HH.log,如 log_2026-02-11_12.log
    初始化时传入 initLog(LOG_FILE_MODE_HOUR) 即可。

需要权限

  • 文件读取、文件写入
"android.permission.READ_EXTERNAL_STORAGE"
"android.permission.WRITE_EXTERNAL_STORAGE"
  • 即:在manifest.json中的distribute.android.permissions加入
// 读取文件时需要
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
// 写入文件时需要(默认保存到沙盒缓存)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

快速开始

import { initLog, LOG_FILE_MODE_DAY, LOG_FILE_MODE_HOUR } from '@/uni_modules/ima-log'

// 按天切分日志(默认)
initLog()

// 按小时切分日志
initLog(LOG_FILE_MODE_HOUR)
// 或 initLog(1)

使用示例(设置日志 + 上传)

<template>
    <view class="content">
        <view class="content-title">设置日志</view>
        <view class="content-button ima-log" @click="logInfoClick">设置一般日志</view>
        <view class="content-button ima-log" @click="logWarnClick">设置警告日志</view>
        <view class="content-button ima-log" @click="logErrorClick">设置错误日志</view>
        <view class="content-button ima-log" @click="logUserClick">设置事件日志</view>
        <view class="content-button ima-log" @click="logAppClick">设置系统日志</view>
    </view>
</template>

<script lang="ts">
import {
    initLog,
    LOG_FILE_MODE_HOUR,
    setUser,
    setTag,
    logInfo,
    logWarn,
    logError,
    logUser,
    logApp
} from '@/uni_modules/ima-log'
export default {
    data() {
        return {}
    },
    onLoad() {
        // 按小时切分日志并初始化
        initLog(LOG_FILE_MODE_HOUR)
            .then((res: any) => console.log(res))
            .catch((err: any) => console.log(err))
    },
    methods: {
        // 设置用户
        setUserClick() {
            setUser('码小趣')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        },
        // 设置标签
        setTagClick() {
            setTag('标签')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        },
        // 设置一般日志
        logInfoClick() {
            logInfo('一般日志')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        },
        // 设置警告日志
        logWarnClick() {
            logWarn('警告日志')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        },
        // 设置错误日志
        logErrorClick() {
            logError('错误日志')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        },
        // 设置事件日志【自定义】
        logUserClick() {
            logUser('设置事件日志', 'logUser')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        },
        // 设置系统日志【自定义】
        logAppClick() {
            logApp('设置系统日志', 'logApp')
                .then((res: any) => {
                    console.log(res)
                })
                .catch((err: any) => {
                    console.log(err)
                })
        }
    }
}
</script>

<style lang="scss">
.content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;

    &-title {
        margin-top: 10rpx;
        padding: 10rpx;
        font-size: 44rpx;
        font-weight: 800;
        color: #ff0000;
    }

    &-message {
        font-size: 28rpx;
        font-weight: 800;
        text-align: center;
        color: #ff6700;
    }

    &-button {
        height: 65rpx;
        width: 750rpx;
        padding: 20rpx;
        line-height: 65rpx;
        text-align: center;
        background: #00e0f1;
        margin-bottom: 25rpx;
    }
}
</style>

方法一览

方法 说明 参数 平台
initLog(logFileMode?) 初始化自动收集应用日志 logFileMode: 可选,LOG_FILE_MODE_DAY(0) 按天 / LOG_FILE_MODE_HOUR(1) 按小时,不传默认按天 Android / iOS / 鸿蒙
LOG_FILE_MODE_DAY 常量 0,按天切分日志文件 - 全平台
LOG_FILE_MODE_HOUR 常量 1,按小时切分日志文件 - 全平台
setUser(user, userName?) 设置用户标识 user: 用户 id,userName: 可选 全平台
setTag(tag) 设置标签 tag: 标签名 全平台
logInfo(msg) 记录一般日志 msg: 内容 全平台
logWarn(msg) 记录警告日志 msg: 内容 全平台
logError(msg) 记录错误日志 msg: 内容 全平台
logUser(msg, type?) 记录用户/事件日志 msg: 内容,type: 可选类型 全平台
logApp(msg, type?) 记录系统/应用日志 msg: 内容,type: 可选类型 全平台
getLogFiles(include?) 获取本地日志文件列表 include: 是否包含 log_apps.log,默认 false 全平台
cleanLogs(keepDay?) 清理过期日志 keepDay: 保留最近天数,默认 30;不清理 log_apps.log 全平台
uploadLog(options, onCallback?) 上传日志文件(多文件逐个上传) options: IUpload,onCallback: 可选 全平台
uploadZip(options, onCallback?) 压缩并上传日志文件(zip) options: IUpload,onCallback: 可选 全平台
uploadFile(filePath, options, uploadFileName?, onCallback?) 上传指定单个文件 filePath: 本地绝对路径,options: IUpload,uploadFileName: 可选 全平台
uploadFolder(folderPath, options, onCallback?) 压缩指定文件夹并上传 folderPath: 本地文件夹绝对路径,options: IUpload 全平台

IUpload 上传参数

字段 类型 必填 说明
serverUrl string 上传接口地址
headers UTSJSONObject | null 请求头
parameters UTSJSONObject | null 附加表单参数
timeout number 超时时间(毫秒),默认 30000
include boolean 是否包含系统日志 log_apps.log,默认 false
days number 上传最近几天日志,默认 7(仅 uploadLog/uploadZip 使用)
suffix string 上传时文件后缀,uploadLog 默认 "log",uploadZip/uploadFolder 默认 "zip"
type IUpload = {
  serverUrl: string
  headers?: UTSJSONObject | null
  parameters?: UTSJSONObject | null
  timeout?: number
  include?: boolean
  days?: number
  suffix?: string
}

IReturn 返回值

type IReturn = {
  success: boolean
  message: string
  data?: IData  // 如 uploadedFiles、totalSize、fileCount 等
}

使用说明

  • uploadFile / uploadFolderfilePathfolderPath 须为应用可访问的本地绝对路径(如 Android 下 plus.io.convertLocalFileSystemURL('_doc') 得到路径后使用)。
  • 按小时模式:在应用启动时调用 initLog(LOG_FILE_MODE_HOUR) 即可,之后写入的日志将按小时落入 log_yyyy-MM-dd_HH.log
  • 清理与上传cleanLogsuploadLoguploadZip 已同时支持按天与按小时两种文件名格式,无需额外配置。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

读取文件、写入文件 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: