代码和使用方法如下
1.操作日志公共方法:
js
// common/logger.js:
export const logger = {
main: plus.android.runtimeMainActivity(),
Environment: plus.android.importClass("android.os.Environment"),
BufferedWriter: plus.android.importClass("java.io.BufferedWriter"),
File: plus.android.importClass("java.io.File"),
FileOutputStream: plus.android.importClass("java.io.FileOutputStream"),
OutputStreamWriter: plus.android.importClass("java.io.OutputStreamWriter"),
LogPath: "", //日志存储目录
saveDays: 7, //日志最大存储天数
init() {
if (
this.Environment.MEDIA_MOUNTED ||
!this.Environment.isExternalStorageRemovable()
) {
this.LogPath = this.main.getExternalFilesDir(null).getPath();
} else {
this.LogPath = this.main.getFilesDir().getPath();
}
let fileManager = new this.File(this.LogPath);
let files = fileManager.listFiles();
let now = new Date();
let maxSavedDay = utils.getFormatDate(
now - this.saveDays * 24 * 60 * 60 * 1000
);
// 遍历目录下的日志文件,并删除日志最大存储天数前的日志
for (var i in files) {
let name = files[i].getName().split(".")[0],
time = name.split("_")[1];
if (time <= maxSavedDay && name.search("log_") == 0) {
files[i].delete();
}
}
console.log("LogPath->", this.LogPath);
},
d(tag, msg = "") {
let now = new Date();
let date = utils.getFormatDate(now);
let datetime = utils.getFormatDateTime(now);
msg = typeof msg !== "string" ? JSON.stringify(msg) : msg;
//文件名
let fileName = this.LogPath + "/log_" + date + ".txt";
//写入的内容
let content = `\n${datetime} ${tag}${msg ? ":" + msg : msg}\n`;
let file = new this.File(this.LogPath);
if (!file.exists()) {
file.mkdirs(); //创建父路径
}
let fos = null;
let bw = null;
try {
fos = new this.FileOutputStream(fileName, true);
bw = new this.BufferedWriter(new this.OutputStreamWriter(fos));
//bw.write(log);
bw.append(content);
} catch (e) {
console.log("e->", e);
} finally {
try {
if (bw != null) {
bw.close(); //关闭缓冲流
fos.close(); //关闭文件输出流
}
} catch (closeEx) {
console.log("closeEx->", closeEx);
}
}
},
};
export const utils = {
getFormatDate(dateString) {
const date = new Date(dateString);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = month > 9 ? month : "0" + month;
day = day > 9 ? day : "0" + day;
return `${year}-${month}-${day}`;
},
getFormatDateTime(dateString) {
const date = new Date(dateString);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let hour = date.getHours();
let min = date.getMinutes();
let second = date.getSeconds();
month = month > 9 ? month : "0" + month;
day = day > 9 ? day : "0" + day;
hour = hour > 9 ? hour : "0" + hour;
min = min > 9 ? min : "0" + min;
second = second > 9 ? second : "0" + second;
return `${year}-${month}-${day} ${hour}:${min}:${second}`;
},
};
2.main.js中全局引入:
js
//main.js:
//#ifdef APP-PLUS
import { logger } from "./common/logger.js";
Vue.prototype.$logger = logger;
//#endif
3.App.vue中初始化操作日志公共方法:
js
// App.vue:
onLaunch: function() {
//#ifdef APP-PLUS
this.$logger.init();
//#endif
}
4.使用方法说明:
调用this.$logger.d(tag,msg)方法
参数 | 说明 | 数据类型 | 默认值 |
---|---|---|---|
tag | 日志标签,默认会在标签后面追加":" | string | |
msg | 日志内容 | string、object、array | '' |
5.vue项目中使用:
js
methods: {
handleData() {
let data = {
name:'张三',
age:18
}
this.$logger.d('返回的数据为',data) //2025-10-21 15:50:30 返回的数据为:{name:'张三',age:18}
}
}
6.说明:
默认配置了日志最大存储时间(saveDays)为7天,可配置。
拓展
uniapp添加操作日志(uniapp、日志、文件、html5+)
uni app 的app端 写入运行日志到指定文件夹
uni-app使用本地文件在移动端长久存储数据