当前位置:首页 > 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和vue有什么区别

uniapp和vue有什么区别

uniapp和vue的区别 1. 定位与用途 Vue:一个渐进式JavaScript框架,专注于构建用户界面,适用于开发单页应用(SPA)或复杂前端项目。 UniApp:基于Vue.js的跨…

uniapp删除

uniapp删除

卸载 uniapp 项目依赖 在项目根目录下执行以下命令,移除 node_modules 和依赖锁文件: rm -rf node_modules package-lock.json 如需清理全局…

uniapp应用市场

uniapp应用市场

uniapp应用市场概述 Uniapp作为跨平台开发框架,支持将代码编译到iOS、Android、Web及各类小程序平台。其应用市场(插件市场)是开发者获取扩展插件、模板、组件的重要资源库,涵盖UI组…

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中…

uniapp隐藏右侧滚动条

uniapp隐藏右侧滚动条

隐藏右侧滚动条的方法 在UniApp中隐藏右侧滚动条可以通过CSS样式实现,适用于H5、小程序等平台。以下是几种常见的方法: 全局样式设置 在App.vue的全局样式中添加以下CSS代码,适用于所有…

uniapp悬浮

uniapp悬浮

实现悬浮效果的方法 在UniApp中实现悬浮效果可以通过CSS的position: fixed或position: sticky属性结合动态样式控制来实现。以下是具体实现方式: 使用CSS固…