我在我的JS文件中使用console.log
來跟蹤應用程序。Javascript:控制檯日誌記錄
問題:日誌處於生產環境中。
如何從代碼中刪除像console.log
這樣的行?
P.S.請不要建議像find + xargs + grep -v
這樣的文本解決方案。
我在我的JS文件中使用console.log
來跟蹤應用程序。Javascript:控制檯日誌記錄
問題:日誌處於生產環境中。
如何從代碼中刪除像console.log
這樣的行?
P.S.請不要建議像find + xargs + grep -v
這樣的文本解決方案。
對於我的重要項目,我有我自己的日誌記錄功能,在內部使用console.log()
,但在我的代碼中沒有console.log()
調用,除了此函數中的一個地方。然後我可以通過更改一個變量來啓用或禁用日誌記錄。
我的函數實際上是比這與選擇一個涉及多一點,以輸出放到不僅僅是控制檯等地,但在概念上,它看起來像這樣:
// change this variable to false to globally turn off all logging
var myLoggingEnabled = true;
function myLog() {
if (myLoggingEnabled) {
if (window.console && console.log) {
console.log.apply(this, arguments);
}
}
}
然後,您可以使用這樣的代碼登錄:
myLog(foo);
僅供參考,對部署的代碼緊湊性和性能優化,我也有一個最小化步驟可以消除我的代碼myLog()
所有呼叫。這是我選擇利用的優化。也許你可以分享爲什麼你不會考慮這種類型的優化。
如果您使用Grunt,則可以添加一個任務以刪除/註釋console.log語句。 因此不再調用console.log。
我選擇了這個模塊(例如'grunt-remove-logging-calls')來替代'grunt-remove-logging',因爲後者在替換更復雜的控制檯表達式時產生了問題 –
是啊,我也有類似的情況,我貼一下這裏。 http://bhavinsurela.com/naive-way-of-overriding-console-log/ 這是代碼的要點。
var domainNames =["fiddle.jshell.net"]; // we replace this by our production domain.
var logger = {
force:false,
original:null,
log:function(obj)
{
var hostName = window.location.hostname;
if(domainNames.indexOf(hostName) > -1)
{
if(window.myLogger.force === true)
{
window.myLogger.original.apply(this,arguments);
}
}else {
window.myLogger.original.apply(this,arguments);
}
},
forceLogging:function(force){
window.myLogger.force = force;
},
original:function(){
return window.myLogger.original;
},
init:function(){
window.myLogger.original = console.log;
console.log = window.myLogger.log;
}
}
window.myLogger = logger;
console.log("this should print like normal");
window.myLogger.init();
console.log("this should not print");
window.myLogger.forceLogging(true);
console.log("this should print now");
您想從代碼中刪除行,或者您不希望打印控制檯輸出? – cheeken
請注意,還有其他方法(例如'console.dir')。 –
我認爲,最好從代碼中移除這些行。 – DmitryR