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
205 lines
5.7 KiB
1 year ago
|
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
|
||
|
}
|