| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- import devCache from "../libs/devCache";
- import devOptions from "../libs/devOptions";
- import jsonCompress from "../libs/jsonCompress";
- export default {
- logList: [],
- options: null,
- /**
- * 挂载打印拦截器
- */
- install() {
- let that = this;
- this.options = devOptions.getOptions()
- if (!this.options.console.status) return;
- this.logList = devCache.get("console");
- if (!this.logList) this.logList = [];
- this.syncReqData(); //同步缓存
- if (uni.__log__) {
- // ! VUE3在app端时有这个特殊的方法
- that.mountUniConsole()
- } else {
- that.mountJsConsole()
- }
- //! 删除指定记录
- uni.$on("devTools_delConsoleItem", (item) => {
- let i = that.logList.findIndex(
- (x) => {
- let t = JSON.stringify(x.list)
- return t == JSON.stringify(item.list) &&
- x.time == item.time &&
- x.page == item.page &&
- x.type == item.type
- }
- );
- if (i != -1) {
- that.logList.splice(i, 1);
- }
- that.saveData()
- });
- //! 清空console日志
- uni.$on("devTools_delConsoleAll", () => {
- that.logList = []
- that.saveData()
- });
- },
- /**
- * 同步请求信息到缓存数据中
- */
- syncReqData() {
- let that = this;
- setTimeout(() => {
- try {
- that.saveData()
- } catch (error) {
- console.log("console.syncReqData error", error);
- }
- that.syncReqData()
- }, 3000);
- },
- /**
- * 同步数据到缓存
- */
- saveData() {
- let that = this;
- that.logList = jsonCompress.compressArray(that.logList, 'end', that.options.console.cache.size)
- devCache.set("console", that.logList)
- },
- /**
- * 挂载监听js自带的console函数
- */
- mountJsConsole() {
- let that = this;
- try {
- let l = console.log;
- try {
- globalThis.consoleLog = function () {
- console.log(...arguments)
- };
- } catch (error) { }
- try {
- window.consoleLog = function () {
- console.log(...arguments)
- };
- } catch (error) { }
- console.log = function () {
- replaceConsole("log", arguments)
- };
- let e = console.error;
- function _error() {
- try {
- let args = [...arguments]
- if (
- args[0]
- && typeof args[0] == "string"
- && (
- args[0] == "__ignoreReport__" //! 忽略错误日志上报
- || args[0].indexOf("__ignoreReport__") == 0
- )
- ) {
- let _args = []
- if (args.length > 1) {
- for (let i = 0; i < args.length; i++) {
- if (i != 0) {
- _args.push(args[i])
- }
- }
- } else {
- _args[0] = args[0];
- _args[0] = _args[0].replace("__ignoreReport__", "");
- }
- if (that.options.console.isOutput) {
- e(..._args)
- }
- return;
- }
- replaceConsole("error", args)
- } catch (error) {
- e("监听console.error出错", error)
- }
- }
- console.error = _error;
- let w = console.warn;
- console.warn = function () {
- replaceConsole("warn", arguments)
- };
- let i = console.info;
- console.info = function () {
- replaceConsole("info", arguments)
- };
- /**
- * 替换系统打印函数
- */
- function replaceConsole(type, args) {
- try {
- let data = []
- if (args && args.length > 0) {
- let argList = args;
- // #ifdef APP-PLUS
- if (args.length == 1) {
- argList = args[0].split("---COMMA---");
- let endItem = argList[argList.length - 1];
- if (
- endItem
- && typeof endItem == "string"
- && endItem.indexOf(" at ") > -1
- && endItem.indexOf(":") > -1
- ) { // 可能包含路径信息
- let endList = endItem.split(" at ");
- if (endList.length == 2) {
- argList.pop()
- argList.push(endList[0])
- argList.push("at " + endList[1])
- }
- }
- argList = argList.map((item, index) => {
- try {
- if (typeof item == "string") {
- if (item.indexOf("---BEGIN") > -1) {
- let isJson = item.indexOf("---BEGIN:JSON---") > -1;
- item = item.replace(/---BEGIN:.*?---/g, '')
- item = item.replace(/---END:.*?---/g, '')
- if (isJson) {
- item = JSON.parse(item);
- }
- } else if (item == "---NULL---") {
- item = null;
- } else if (item == "---UNDEFINED---") {
- item = undefined;
- }
- }
- } catch (error) {
- console.log("replaceConsole 尝试解析对象出错:", error);
- }
- return item;
- })
- }
- // #endif
- let oneSize = that.options.console.cache.rowSize / argList.length;
- for (let i = 0; i < argList.length; i++) {
- let row = jsonCompress.compressObject(argList[i], oneSize)
- data.push(row)
- }
- } else {
- data = []
- }
- let page = "未知";
- try {
- let pages = getCurrentPages()
- let item = pages[pages.length - 1];
- if (item && item.route) {
- page = item.route;
- }
- } catch (error) { }
- that.logList.unshift({
- list: data,
- time: new Date().getTime(),
- page,
- type,
- })
- if (that.options.console.isOutput) {
- if (type == "error") {
- e(...args)
- } else if (type == "warn") {
- w(...args)
- } else if (type == "info") {
- i(...args)
- } else {
- l(...args)
- }
- }
- } catch (error) {
- if (that.options.console.isOutput) {
- e("监听console出错", error)
- }
- }
- }
- } catch (error) {
- console.log("console.install error", error);
- }
- },
- /**
- * 挂载监听uni自带的打印函数
- */
- mountUniConsole() {
- let that = this;
- try {
- let uniSysConsole = uni.__log__;
- try {
- globalThis.consoleLog = function () {
- uni.__log__("log", "未知来源", ...arguments)
- };
- } catch (error) { }
- try {
- window.consoleLog = function () {
- uni.__log__("log", "未知来源", ...arguments)
- };
- } catch (error) { }
- uni.__log__ = function (type, line, ...args) {
- try {
- // 处理特殊情况 "__ignoreReport__" 忽略错误日志上报
- if (type == "error") {
- if (
- args[0]
- && typeof args[0] == "string"
- && (
- args[0] == "__ignoreReport__" //! 忽略错误日志上报
- || args[0].indexOf("__ignoreReport__") == 0
- )
- ) {
- let _args = []
- if (args.length > 1) {
- for (let i = 0; i < args.length; i++) {
- if (i != 0) {
- _args.push(args[i])
- }
- }
- } else {
- _args[0] = args[0];
- _args[0] = _args[0].replace("__ignoreReport__", "");
- }
- if (that.options.console.isOutput) {
- uniSysConsole(type, line, ..._args)
- }
- return;
- }
- }
- let data = []
- if (args && args.length > 0) {
- let argList = args;
- let oneSize = that.options.console.cache.rowSize / argList.length;
- for (let i = 0; i < argList.length; i++) {
- let row = jsonCompress.compressObject(argList[i], oneSize)
- data.push(row)
- }
- } else {
- data = []
- }
- let page = "未知";
- try {
- let pages = getCurrentPages()
- let item = pages[pages.length - 1];
- if (item && item.route) {
- page = item.route;
- }
- } catch (error) { }
- data.push(line)
- that.logList.unshift({
- list: data,
- time: new Date().getTime(),
- page,
- type,
- })
- if (that.options.console.isOutput) {
- uniSysConsole(type, line, ...data)
- }
- } catch (error) {
- if (that.options.console.isOutput) {
- uniSysConsole("error", "监听console出错", error)
- }
- }
- }
- /**
- * 替换系统打印函数
- */
- function replaceConsole(type, args) {
- try {
- let data = []
- if (args && args.length > 0) {
- let argList = args;
- // #ifdef APP-PLUS
- if (args.length == 1) {
- argList = args[0].split("---COMMA---");
- let endItem = argList[argList.length - 1];
- if (
- endItem
- && typeof endItem == "string"
- && endItem.indexOf(" at ") > -1
- && endItem.indexOf(":") > -1
- ) { // 可能包含路径信息
- let endList = endItem.split(" at ");
- if (endList.length == 2) {
- argList.pop()
- argList.push(endList[0])
- argList.push("at " + endList[1])
- }
- }
- argList = argList.map((item, index) => {
- try {
- if (typeof item == "string") {
- if (item.indexOf("---BEGIN") > -1) {
- let isJson = item.indexOf("---BEGIN:JSON---") > -1;
- item = item.replace(/---BEGIN:.*?---/g, '')
- item = item.replace(/---END:.*?---/g, '')
- if (isJson) {
- item = JSON.parse(item);
- }
- } else if (item == "---NULL---") {
- item = null;
- } else if (item == "---UNDEFINED---") {
- item = undefined;
- }
- }
- } catch (error) {
- console.log("replaceConsole 尝试解析对象出错:", error);
- }
- return item;
- })
- }
- // #endif
- let oneSize = that.options.console.cache.rowSize / argList.length;
- for (let i = 0; i < argList.length; i++) {
- let row = jsonCompress.compressObject(argList[i], oneSize)
- data.push(row)
- }
- } else {
- data = []
- }
- let page = "未知";
- try {
- let pages = getCurrentPages()
- let item = pages[pages.length - 1];
- if (item && item.route) {
- page = item.route;
- }
- } catch (error) { }
- that.logList.unshift({
- list: data,
- time: new Date().getTime(),
- page,
- type,
- })
- if (that.options.console.isOutput) {
- if (type == "error") {
- e(...args)
- } else if (type == "warn") {
- w(...args)
- } else if (type == "info") {
- i(...args)
- } else {
- l(...args)
- }
- }
- } catch (error) {
- if (that.options.console.isOutput) {
- e("监听console出错", error)
- }
- }
- }
- } catch (error) {
- console.log("console.install error", error);
- }
- },
- }
|