80

重複の可能性:
Chrome で console.log への呼び出しを傍受
する

私の JS アプリが に書き込むとき、console.logそのログ メッセージをキャプチャして、出力をサーバーに記録する AJAX を実行できるようにします。それ、どうやったら出来るの?

ログに書き込むコードは外部サービスからのものです。そのため、直接 ajax することはできません。

4

2 に答える 2

156

次の方法で 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)と失敗します。logconsole


更新以下の zzzzBov のコメントによると、IE9console.logでは実際には関数ではないため、oldLog.apply失敗します。詳細については、console.log.apply が IE9で機能しないを参照してください。

于 2012-07-09T21:05:38.407 に答える
24

単純:

function yourCustomLog(msg) {
  //send msg via AJAX
}

window.console.log = yourCustomLog;

consoleオブジェクト全体をキャプチャーconsole.infoなどにオーバーライドしたい場合がありますconsole.warn

window.console = {
  log : function(msg) {...},
  info : function(msg) {...},
  warn : function(msg) {...},
  //...
}
于 2012-07-09T21:04:42.267 に答える