errorReport.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import devCache from "./devCache";
  2. import devOptions from "./devOptions";
  3. import jsonCompress from "./jsonCompress";
  4. /**
  5. * ! vue报错捕获
  6. */
  7. /**
  8. * * vue错误日志上报
  9. * @param {'ve'|'vw'|'oe'|'n'} type 错误类型
  10. */
  11. function errorReport(msg, trace, type = "n") {
  12. try {
  13. if (!msg) return false;
  14. if (msg instanceof Error) {
  15. msg = msg.message;
  16. }
  17. let options = devOptions.getOptions()
  18. if (!options.error.status) return;
  19. let page = "未知";
  20. try {
  21. let pages = getCurrentPages()
  22. let item = pages[pages.length - 1];
  23. if (item && item.route) {
  24. page = item.route;
  25. }
  26. } catch (error) { }
  27. let logs = devCache.get("errorReport");
  28. if (!logs) logs = [];
  29. if (logs.length >= options.error.cache.rowMax) {
  30. logs = logs.splice(0, options.error.cache.rowMax)
  31. }
  32. msg = String(msg)
  33. msg = jsonCompress.compressObject(msg, options.error.cache.rowSize / 2)
  34. trace = String(trace)
  35. trace = jsonCompress.compressObject(trace, options.error.cache.rowSize / 2)
  36. logs.unshift({
  37. t: new Date().getTime(),
  38. m: msg,
  39. tr: trace,
  40. p: page,
  41. type,
  42. });
  43. console.error("__ignoreReport__", msg, trace)
  44. logs = jsonCompress.compressArray(logs, "end", options.error.cache.size)
  45. devCache.set("errorReport", logs)
  46. } catch (error) {
  47. console.log("errorReport error: ", error);
  48. }
  49. }
  50. export default errorReport;