亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在前端收集所有控制臺輸出或訪問控制臺的當前內容

如何在前端收集所有控制臺輸出或訪問控制臺的當前內容

揚帆大魚 2023-03-03 15:12:11
我正在使用角度,我想在我的應用程序中實現錯誤報告功能。為此,我想發送瀏覽器控制臺的內容進行調試。但是我怎么能接觸到它。并不是每個錯誤都是用 console.log(...是否可以訪問前端控制臺的內容?謝謝。
查看完整描述

3 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

這種方法不依賴于任何 JS 框架。這是香草javascript。


我從你的問題中可以理解的是,你想訪問error拋給的未捕獲消息console,你還提到你正在處理一些錯誤報告功能。有時您可能還需要捕獲console.log/warn/info您可以覆蓋如下所示的行為以捕獲錯誤/消息,因為控制臺由瀏覽器處理。因此,實現該行為的唯一方法是覆蓋。


附上一個片段,讓您了解捕獲瀏覽器控制臺數據和處理錯誤


// Add this file to app.component maybe 


let logStatements = [];


(() => {

  window.addEventListener("error", ev => {

    reportError(ev);

  })

  // Capturing console logs

  var oldLog = console.log;

  console.log = function (message) {

    oldLog.apply(console, arguments);

    logStatements.push({

      type: "console.log",

      data: message,

    });

  };

})(logStatements);


console.log('hello');

console.log('world');


// Array of captured console.logs

console.info(logStatements)


// Here you can send this to any backend or something

function reportError(ev) {

  console.log(`${ev.message} was caught in ${ev.filename}`);

}


// logging 'user' variable which is not defined to check if it gets caught 

console.log(user);


查看完整回答
反對 回復 2023-03-03
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

如果您不依賴控制臺,這是一種更好的方法。這取決于您,但我認為讓錯誤到達控制臺并不是最佳做法。無論如何,您可以在錯誤到達控制臺之前捕獲錯誤。


查看完整回答
反對 回復 2023-03-03
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

這是我從不同來源匯總的解決方案。它捕獲控制臺中顯示的大多數內容(有些無法捕獲)。


它使它可以作為console.everything一個數組使用,其中包含類型、時間戳和發送到控制臺的數據。


最好將它包含在標頭中作為其自己<script>標記中的第一個腳本,以確保它先于其他任何內容運行并且不受稍后運行的代碼的影響。


if (console.everything === undefined) {

  console.everything = [];

  function TS(){

    return (new Date).toLocaleString("sv", { timeZone: 'UTC' }) + "Z"

  }

  window.onerror = function (error, url, line) {

    console.everything.push({

      type: "exception",

      timeStamp: TS(),

      value: { error, url, line }

    })

    return false;

  }

  window.onunhandledrejection = function (e) {

    console.everything.push({

      type: "promiseRejection",

      timeStamp: TS(),

      value: e.reason

    })

  } 


  function hookLogType(logType) {

    const original= console[logType].bind(console)

    return function(){

      console.everything.push({ 

        type: logType, 

        timeStamp: TS(), 

        value: Array.from(arguments) 

      })

      original.apply(console, arguments)

    }

  }


  ['log', 'error', 'warn', 'debug'].forEach(logType=>{

    console[logType] = hookLogType(logType)

  })

}


查看完整回答
反對 回復 2023-03-03
  • 3 回答
  • 0 關注
  • 464 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號