当前位置:首页 > uni-app

uniapp 日志存储

2026-03-05 08:47:02uni-app

日志存储方案选择

在UniApp中实现日志存储,可根据需求选择本地存储、文件存储或服务端存储。本地存储适合临时日志或小规模数据;文件存储适合设备端长期保存;服务端存储适合需要集中管理的场景。

本地存储(uni.setStorage)

使用UniApp提供的本地存储API,适合保存少量日志数据。日志以键值对形式存储在本地,重启应用后仍可读取。

// 存储日志
let logs = ['error: 2023-01-01 10:00 - network timeout'];
uni.setStorage({
  key: 'app_logs',
  data: logs
});

// 读取日志
uni.getStorage({
  key: 'app_logs',
  success: function(res) {
    console.log(res.data);
  }
});

文件存储(uni.saveFile)

对于需要长期保存或大量日志,可使用文件系统存储。UniApp支持将日志写入设备文件系统,需注意不同平台的路径差异。

// 写入日志到文件
const filePath = `${plus.io.PUBLIC_DOCUMENTS}/app_logs.txt`;
const content = 'error: 2023-01-01 10:00 - network timeout\n';
plus.io.requestFileSystem(plus.io.PRIVATE_DOCUMENTS, function(fs) {
  fs.root.getFile('app_logs.txt', {create: true}, function(fileEntry) {
    fileEntry.createWriter(function(writer) {
      writer.seek(writer.length);
      writer.write(content);
    });
  });
});

服务端日志上传

通过HTTP请求将日志发送到服务端,适合需要集中分析的场景。建议采用批量上传减少请求次数。

// 日志批量上传
function uploadLogs(logs) {
  uni.request({
    url: 'https://api.example.com/logs',
    method: 'POST',
    data: { logs: logs },
    success: () => {
      uni.removeStorage({ key: 'app_logs' }); // 上传后清除本地日志
    }
  });
}

日志分级管理

实现不同级别的日志处理,如DEBUG、INFO、ERROR等级别。可通过配置决定哪些级别需要存储或上传。

const LOG_LEVEL = {
  DEBUG: 1,
  INFO: 2,
  ERROR: 3
};

function log(message, level = LOG_LEVEL.INFO) {
  if (level >= currentLogLevel) {
    const timestamp = new Date().toISOString();
    console.log(`[${level}] ${timestamp} - ${message}`);
    // 存储或上传逻辑
  }
}

日志自动清理

对于本地存储的日志,需要实现自动清理机制防止存储空间耗尽。可基于时间或日志数量进行清理。

function cleanOldLogs(maxDays = 7) {
  uni.getStorage({
    key: 'app_logs',
    success: function(res) {
      const cutoff = Date.now() - maxDays * 24 * 60 * 60 * 1000;
      const filteredLogs = res.data.filter(log => {
        return new Date(log.timestamp) > cutoff;
      });
      uni.setStorage({ key: 'app_logs', data: filteredLogs });
    }
  });
}

跨平台兼容处理

不同平台对文件系统的支持存在差异,需要进行兼容性处理。可通过条件编译实现平台特定代码。

// #ifdef APP-PLUS
const basePath = plus.io.PRIVATE_DOCUMENTS;
// #endif
// #ifdef H5
const basePath = '/user/logs';
// #endif

性能优化建议

对于高频日志记录,建议采用缓冲机制批量处理。可设置定时器或日志数量阈值触发存储操作,避免频繁IO影响性能。

uniapp 日志存储

let logBuffer = [];
const FLUSH_INTERVAL = 5000; // 5秒

setInterval(() => {
  if (logBuffer.length > 0) {
    saveLogs(logBuffer);
    logBuffer = [];
  }
}, FLUSH_INTERVAL);

function bufferedLog(message) {
  logBuffer.push(message);
}

标签: 日志uniapp
分享给朋友:

相关文章

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

uniapp中如何使用iconfont

uniapp中如何使用iconfont

使用 Iconfont 在 Uniapp 中的步骤 下载 Iconfont 资源 访问 Iconfont 官网,选择需要的图标并添加到项目。下载时选择 Font class 格式,解压后会得到 .tt…

uniapp特性

uniapp特性

uniapp的核心特性 跨平台开发 uniapp支持一套代码编译到多个平台,包括iOS、Android、H5、微信小程序、支付宝小程序、百度小程序、字节跳动小程序等。开发者无需为不同平台单独编写代码。…

uniapp adb

uniapp adb

在UniApp中使用ADB的方法 ADB(Android Debug Bridge)是Android开发中常用的调试工具,可用于UniApp项目的真机调试、日志查看等操作。以下是具体使用方法: 连接…

重构uniapp

重构uniapp

重构 Uniapp 项目的关键方法 代码结构优化 将页面、组件、静态资源按功能模块划分,避免全部堆放在根目录。建议采用以下结构: src/ ├── components/ // 通用组件…

uniapp gpio

uniapp gpio

在 uniapp 中直接操作 GPIO(通用输入输出)通常需要依赖原生平台的硬件接口,因为 uniapp 本身是基于前端技术的跨平台框架,不直接提供硬件访问能力。以下是实现 GPIO 控制的几种方法:…