可能重複:
Intercept calls to console.log in Chrome
Can I extend the console object (for rerouting the logging) in javascript?捕獲javascript console.log?
當我的JS應用程序寫入的console.log,我想這樣我可以說AJAX日誌輸出,以捕獲日誌消息服務器。我怎麼做?
寫入日誌的代碼來自外部服務,這就是爲什麼我不能直接對它進行Ajax的原因。
可能重複:
Intercept calls to console.log in Chrome
Can I extend the console object (for rerouting the logging) in javascript?捕獲javascript console.log?
當我的JS應用程序寫入的console.log,我想這樣我可以說AJAX日誌輸出,以捕獲日誌消息服務器。我怎麼做?
寫入日誌的代碼來自外部服務,這就是爲什麼我不能直接對它進行Ajax的原因。
您可以通過以下方式劫持的JavaScript函數:
(function(){
var oldLog = console.log;
console.log = function (message) {
// DO MESSAGE HERE.
oldLog.apply(console, arguments);
};
})();
oldLog
(出於可維護性原因)。message
的地方。apply
使用,所以我們可以使用原來的參數調用它上console
。只需撥打oldLog(message)
就會失敗,因爲log
取決於其與console
的關聯。
更新每zzzzBov的評論下面,在IE9 console.log
實際上不是一個功能,所以oldLog.apply
會失敗。有關更多詳細信息,請參閱console.log.apply not working in IE9。
簡單:
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) {...},
//...
}
您無法使用window.console = {...},因爲window.console是一個只讀屬性! – Luillyfe 2018-02-23 21:28:29
[您的代碼在IE中會有問題,因爲'console.log'實際上並不是IE中的'Function'實例](http://stackoverflow.com/questions/5538972/console-log-apply-not-working-在-IE9)。 – zzzzBov 2014-01-08 14:31:34
@zzzzBov有趣的。我假設分配'console._oldLog = console.log; console._oldLog(message);'會起作用,但是如果'console'本身就是一個託管對象,那麼不會有任何更改被保留。不幸的是,我沒有IE來測試這個了。 – 2014-01-08 16:19:44
是的,你仍然可以像這樣調用'_oldLog'。 'oldLog = Function.prototype.bind.call(console.log,console)'適用於IE9 +,但是對於IE8及更低版本,需要爲'Function.prototype.bind'添加一個polyfill。 – zzzzBov 2014-01-08 16:30:24