uniapp日志写入

1.来源于:

html5 plus 记录日志 - DCloud 插件市场

2.公共目录中建一个文件夹:walker-logger.js

javascript 复制代码
/**
* 标题:自定义日志存储在txt中
* 说明:
1. 自定义日志存储在txt中
2. 生成的文件存放在对应app目录下的 _doc/logs 文件夹中
··· js
// main.js 文件进行全局挂载
// 引入logger
import logger from  '@/components/libs/logger.js'
// 挂载logger
uni.$console = logger;
```
...
* 使用方法 *********************************************
* 1. 使用全局挂载的方式(和console)一致
* uni.$console.debug('日志信息');
* uni.$console.log('日志信息');
* uni.$console.info('日志信息');
* uni.$console.warn('日志信息');
* uni.$console.error('日志信息');

* 2. 在普通js文件单独引入的方法
* import logger from '@/path/to/the/logger.js'
* logger.log('日志信息')
* logger.error('日志信息')

 */

// 日志存放的文件夹目录
const LOG_DIR = "_doc/logs";
/**
 * 获取当前时间
 */
function getDayStr() {
  var y, m, d, h, mm, s;
  var date = new Date();
  y = date.getFullYear();
  m = date.getMonth() + 1;
  d = date.getDate();
  m = m < 10 ? "0" + m : m;
  d = d < 10 ? "0" + d : d;
  // //console.log('日期:',y,m,d)
  // return '20220607' // 生成指定日期
  return "" + y + m + d;
}
/**
 * 获取当前时间,yyyy-mm-dd hh:mm:ss
 * 用于记录日志的时间信息
 */
function getTimeStr() {
  var y, m, d, h, mm, s;
  var date = new Date();
  y = date.getFullYear();
  m = date.getMonth() + 1;
  d = date.getDate();
  h = date.getHours();
  mm = date.getMinutes();
  s = date.getSeconds();
  m = m < 10 ? "0" + m : m;
  d = d < 10 ? "0" + d : d;
  h = h < 10 ? "0" + h : h;
  mm = mm < 10 ? "0" + mm : mm;
  s = s < 10 ? "0" + s : s;
  var timeStr = y + "-" + m + "-" + d + " " + h + ":" + mm + ":" + s;
  return timeStr;
}
/**
 * 日志TXT的名称
 */
function getLogFileName() {
  const txt = LOG_DIR + "/" + getDayStr() + ".txt";
  console.log("TXT文件名称:", txt);
  return txt;
}
let tasks = [];
/**
 * @param {Object} tag 标识
 * @param {Object} msg 空格
 */
function writeToTxt(tag) {
  return new Promise((resolve, reject) => {
    let msgs = "";
    for (var i = 1; i < arguments.length; i++) {
      const item = arguments[i];
      if (
        typeof item == "string" ||
        typeof item == "number" ||
        typeof item == "boolean"
      ) {
        msgs = msgs + "\t" + item;
      } else {
        msgs = msgs + "\t" + JSON.stringify(item);
      }
    }
    // 获取当前时间
    let txt_msg = getTimeStr() + "\t[" + tag + "]\t" + msgs + "\n";
    if (tag == "ERROR") {
      console.error(txt_msg);
    } else {
      // //console.log(txt_msg);
    }
    tasks.push(txt_msg);
    resolve(true);
  }).then(() => {
    clearTask();
  });
}
// 清空日志到日志文件
function clearTask() {
  // #ifdef APP-PLUS
  if (tasks.length === 0) {
    return;
  }
  const txt_msg = tasks.join("");
  tasks = [];
  const fileName = getLogFileName();
  plus.io.requestFileSystem(
    plus.io.PRIVATE_DOC,
    (fs) => {
      fs.root.getFile(
        fileName,
        {
          create: true,
        },
        function (entry) {
          // 写入到本地
          entry.createWriter(
            function (writer) {
              writer.onwrite = function (e) {
                // console.log("Write data success!");
                console.log("写入本地日志 >>>> ", txt_msg);
              };
              writer.onerror = function (e) {
                console.eror(
                  "写入本地日志失败 >>>> ",
                  JSON.stringify(e),
                  txt_msg
                );
              };
              // Write data to the end of file.
              writer.seek(writer.length);
              writer.write(txt_msg);
            },
            function (e) {
              console.log(e.message);
            }
          );
        }
      );
    },
    function (e) {
      console.log("Request file system failed: " + JSON.stringify(e));
    }
  );
  // #endif
}

/**
 * 压缩所有的日志为zip
 */
function zipLogDir(callback) {
  //console.log('开始压缩');
  // #ifdef APP-PLUS
  var zipFile = "_doc/logs.zip";
  var targetPath = LOG_DIR;

  // 开始压缩文件
  console.log("开始压缩", targetPath, zipFile);
  plus.zip.compress(
    targetPath,
    zipFile,
    function (res) {
      console.log("开始压缩 Compress success!", res);
      if (callback) {
        callback({
          success: true,
          res,
          zipPath: zipFile,
        });
      }
    },
    function (error) {
      console.error("开始压缩 Compress error!", error);
      if (callback) {
        callback({
          success: false,
          error,
        });
      }
    }
  );
  // #endif
}
/**
 * 删除多少天之前的日志文件
 */
function removeFile(durationDay) {
  return new Promise((resolve, reject) => {
    if (!durationDay || durationDay <= 0) {
      durationDay = 10;
    }
    var dirPath = LOG_DIR;
    plus.io.resolveLocalFileSystemURL(
      dirPath,
      function (entry) {
        //读取这个目录对象
        var directoryReader = entry.createReader();
        // console.log(dirPath)
        //读取这个目录下的所有文件
        directoryReader.readEntries(
          function (entries) {
            console.log("日志文件数量", entries.length);
            //如果有才操作
            if (entries.length > 0) {
              let now = getDayStr();
              for (let file of entries) {
                // console.log(file.name);
                // 判断需要保留的日志
                let day = file.name.replace(".txt", "");
                // console.log(parseInt(day) + parseInt(durationDay) < parseInt(now));
                // console.log(parseInt(day));
                // console.log(parseInt(durationDay));
                // console.log(parseInt(day) + parseInt(durationDay));
                // console.log(parseInt(now));
                if (parseInt(day) + parseInt(durationDay) < parseInt(now)) {
                  console.log("需要删除的日志是", file.name);
                  try {
                    file.remove(
                      function () {
                        console.error("删除日志成功", file.name);
                      },
                      function (e) {
                        console.error("删除日志失败", file.name, e);
                      }
                    );
                  } catch (e) {
                    console.error("删除日志失败", file.name, e);
                  }
                } else {
                  console.log("保留的日志是", file.name);
                }
              } // for
            } // if
            resolve();
          },
          function (e) {
            console.log("读取文件失败:" + e.message);
            resolve();
          }
        );
      },
      function (e) {
        console.log("读取目录失败:" + e.message);
        resolve();
      }
    );
  });
}

/**
 * 自定义TXT日志
 */
const logger = {
  /**
   * @param {Object} msg 日志信息的字符串信息
   */
  debug: function () {
    writeToTxt("DEBUG", ...arguments);
    console.debug(...arguments);
  },
  log: function () {
    writeToTxt("LOG", ...arguments);
    console.log(...arguments);
  },
  info: function () {
    writeToTxt("INFO", ...arguments);
    console.info(...arguments);
  },
  warn: function () {
    writeToTxt("WARN", ...arguments);
    console.warn(...arguments);
  },
  error: function () {
    writeToTxt("ERROR", ...arguments);
    console.error(...arguments);
  },
  /**
   * @param {String} tag 日志信息的自定义信息
   */
  tag: function (tag) {
    writeToTxt(tag, ...arguments);
    console.log(...arguments);
  },
  /**
   * @param {Object} msg 日志信息的字符串信息
   */
  network: function () {
    writeToTxt("NETWORK", ...arguments);
    console.log(...arguments);
  },
  /**
   * @param {Object} msg 日志信息的字符串信息
   */
  logIpExchange: function (msg) {
    writeToTxt("IpExchange", ...arguments);
    console.log(...arguments);
  },
  /**
   * 压缩成zip,并返回路径
   * @param {Object} callback
   */
  zipLogDir,
  /**
   * 删除多少${durationDay}天之前的日志文件
   * @param {Object} durationDay 默认是10天
   */
  removeFile,
  /**
   * 主要使用方法。先移除
   * @param {Object} callback
   */
  removeFileAndZipLogDir(callback) {
    removeFile().then(() => {
      zipLogDir(callback);
    });
  },
};

export default logger;

3.全局定义

//日志文件挂载

import logger from "./util/walker-logger";

uni.$console = logger;

4.组件中引用

uni.$console.error('11');

相关推荐
还这么多错误?!1 小时前
uniapp微信小程序,使用fastadmin完成一个一键获取微信手机号的功能
微信小程序·小程序·uni-app
IT 前端 张2 小时前
Uniapp 手机基座调试App 打包成Apk文件,并上传到应用商店
uni-app
User_undefined2 小时前
uniapp Native.js原生arr插件服务发送广播到uniapp页面中
android·javascript·uni-app
web135085886352 小时前
uniapp小程序使用webview 嵌套 vue 项目
vue.js·小程序·uni-app
麦兜*2 小时前
轮播图带详情插件、uniApp插件
前端·javascript·uni-app·vue
veminhe2 小时前
uni-app使用组件button遇到的问题
uni-app·vue
m0_748240022 小时前
uniapp跨平台开发---webview调用app方法
uni-app
407指导员3 小时前
uniapp 微信小程序 页面部分截图实现
微信小程序·小程序·uni-app
变色龙云5 小时前
uni-app开发完成app上传OPPO认定为马甲包如何处理?
uni-app
用户480622604141519 小时前
使用uniapp开发微信小程序-框架搭建
微信小程序·uni-app