货无忧
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
5.7 KiB

import
Base64
from './base64.js'
import handleFile from '@/utils/handleFile.js';
// #ifdef APP
// 保存文字
let logTextData = '';
const {
root
} = handleFile
const file = `${root()}/scanLogs`
// #endif
/**
* js 日期格式化
* 传时间戳参数进行时间戳转换不传时返回当前时间返回年月日时分秒格式
* @param {Object} timeStamp 时间戳参数 非必传
* @param {Object} format 格式化样式 非必传
*/
function getTimeStampDatetime(format = 'yyyy-MM-dd HH:mm:ss', timeStamp) {
let nowDatetime = new Date()
timeStamp ? nowDatetime = new Date(timeStamp) : nowDatetime = new Date()
return nowDatetime.Format(format)
}
Date.prototype.Format = function(fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((
"00" + o[
k]).substr(("" + o[k]).length)));
return fmt;
}
// 获取日志文件名称
function getLogFileName() {
// 今日日期
let nowDate = getTimeStampDatetime("yyyy-MM-dd")
// 当前时间精确到秒
let nowTime = getTimeStampDatetime("HH:mm:ss")
// 文件名称
let fileName = 'app-log.txt'
// fileName = nowDate + 'log.txt'
fileName = nowDate + '.txt'
// 内容换行符(自定义)
let newLine = "\r\n" + "======================================" + "\r\n" + nowTime + " =>>>" + "\r\n"
return {
nowDate: nowDate,
newLine: newLine,
fileName: fileName
}
}
/**
* 日志内容写入
* 文件写入手机地址华为Android/data/应用包名/documents/app-log/2021-01-17log.text
* @param {Object} params 写入内容
* @param {Object} encryption 是否加密
*/
// 防抖
let writelogtime = null;
function writeLog(params, encryption) {
let text = JSON.stringify(params)
if (encryption) {
logTextData += (getLogFileName().newLine + " " + Base64.encode(text));
} else {
logTextData += (getLogFileName().newLine + " " + text);
}
if (writelogtime) {
clearTimeout(writelogtime)
}
//不然就创建新的定时器 3秒没有新日志再执行写入操作
writelogtime = setTimeout(function() {
writeLogTxt()
}, 3000)
}
function writeLogTxt() {
plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {
// 可通过fs操作PUBLIC_DOCUMENTS文件系统
// 创建日志文件夹
fs.root.getDirectory("app-log", {
create: true,
exclusive: false
}, function(dir) {
dir.getDirectory(getLogFileName().nowDate, {
create: true,
exclusive: false
}, function(dir) {
// 创建或写入文件
console.log("Directory Entry Name: " + dir.fullPath + getLogFileName().fileName);
dir.getFile(getLogFileName().fileName, {
create: true
}, function(fileEntry) {
// 找到文件准备写入操作
fileEntry.file(function(file) {
// create a FileWriter to write to the file
fileEntry.createWriter(function(writer) {
// Write data to file.
writer.seek(file.size - 1)
// 换行插入日志文件
writer.write(logTextData);
console.log('111 :>> ', 111);
logTextData = '';
}, function(e) {
console.error("日志写入错误", error)
});
});
});
}, function(err) {
console.error("文件夹创建失败", err)
});
}, function(err) {
console.error("文件夹创建失败", err)
});
}, function(error) {
console.error("文件系统进入错误", error)
});
}
function delLogFile() {
console.log("日志删除")
plus.io.resolveLocalFileSystemURL(
file, //指定的目录
function(entry) {
var directoryReader = entry.createReader(); //获取读取目录对象
directoryReader.readEntries(
function(entries) { //历遍子目录即可
for (var i = 0; i < entries.length; i++) {
console.log("文件信息:" + entries[i].name);
let twoDate = Date.parse(getLogFileName().nowDate) - (86400000 * 2);
console.log("保留三天内日志", twoDate)
if (Date.parse(entries[i].name) < twoDate) {
entries[i].removeRecursively(function(entry) {
writeLog("日志删除成功" + entries[i].name, false);
}, function(e) {
writeLog("日志删除成功" + e.message, false);
});
}
}
},
function(err) {
console.log("没有异常日志");
});
},
function(err) {
console.log("没有异常日志");
});
}
// 查询本地日志文件(直接当前页面调用,该接口未使用)
function selectLogUrl() {
plus.io.resolveLocalFileSystemURL(
file, //指定的目录
function(entry) {
var directoryReader = entry.createReader(); //获取读取目录对象
directoryReader.readEntries(
function(entries) { //历遍子目录即可
let isLog = false;
for (var i = 0; i < entries.length; i++) {
console.log("文件信息:" + entries[i].name);
if (entries[i].name == getLogFileName().nowDate) {
console.log("获取到当天文件为", entries[i].name)
var url = file + '/' + entries[i].name + '/' + getLogFileName().nowDate + '.txt';
var path = plus.io.convertLocalFileSystemURL(url);
var newurl = plus.io.convertAbsoluteFileSystem(path);
isLog = true;
return newurl;
}
}
if (isLog) {
return '';
}
},
function(err) {
console.log("访问目录失败");
});
},
function(err) {
console.log("访问目录失败");
});
}
export default {
writeLog,
delLogFile,
getLogFileName,
selectLogUrl
}