当前位置:首页 > 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支持将日志写入设备文件系统,需注意不同平台的路径差异。

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等级别。可通过配置决定哪些级别需要存储或上传。

uniapp 日志存储

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影响性能。

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 常用样式库推荐 uView UI uView 是专为 uniapp 设计的多端兼容 UI 框架,提供丰富的组件和工具类。支持 Vue3 组合式 API,内置主题定制功能,常用于快速构建企…

uniapp树形选择

uniapp树形选择

uniapp树形选择实现方法 使用uni-data-checkbox组件 uniapp内置的uni-data-checkbox组件支持树形结构选择,适用于多级分类场景。配置时需要将数据格式化为树形结构…

uniapp特性

uniapp特性

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

uniapp 目录

uniapp 目录

uniapp 目录结构 uniapp 的目录结构遵循 Vue.js 项目的规范,同时包含一些特有的文件和目录。以下是典型的 uniapp 项目目录结构及其说明: project-name/ ├──…

uniapp探探

uniapp探探

uniapp实现探探滑动卡片效果 探探的滑动卡片效果主要包含卡片堆叠、左右滑动操作、动画反馈等功能。在uniapp中可以通过以下方式实现类似交互: 使用swiper组件实现基础滑动 uniapp的s…

uniapp 3.0

uniapp 3.0

uniapp 3.0 核心特性 uniapp 3.0 是 DCloud 推出的跨端开发框架升级版本,支持一套代码编译到 iOS、Android、Web 及各类小程序平台。以下为关键特性与使用要点:…