1. ホーム
  2. javascript

[解決済み] javascriptのconsole.logをキャプチャする?重複

2023-07-28 13:38:15

質問

重複の可能性があります。

Chromeのconsole.logの呼び出しを傍受する。

javascriptでコンソールオブジェクト(ログの再ルーティング用)を拡張することは可能ですか?

私のJSアプリが console.log に書き込むとき、私はそのログメッセージをキャプチャして、そのログ出力をサーバーにAJAXできるようにしたい。どのようにすればよいのでしょうか?

ログに書き込むコードは外部サービスからで、それが私が直接それをAJAXすることができない理由です。

どのように解決するのですか?

以下の方法で、JavaScriptの関数を乗っ取ることができます。

(function(){
    var oldLog = console.log;
    console.log = function (message) {
        // DO MESSAGE HERE.
        oldLog.apply(console, arguments);
    };
})();

  1. 1行目 は関数をクロージャで囲み、他の関数が直接 oldLog に直接アクセスできないようにします(保守性の理由から)。
  2. 2行目 は、オリジナルのメソッドをキャプチャします。
  3. 3行目 は新しい関数を作成します。
  4. 4行目 を送信するところです。 message をサーバーに送るところです。
  5. 5行目 は、本来処理されるはずのオリジナルメソッドを呼び出しています。

apply が使われているので、それを呼び出すことができます。 console を元の引数を使って呼び出します。単に oldLog(message) を呼び出すと失敗します。 log との関連付けに依存するためです。 console .


更新 zzzzBovさんのコメントによると、IE9では console.log は実際には関数ではないので oldLog.apply は失敗します。 参照 IE9でconsole.log.applyが動作しない。 を参照してください。