我在JS文件中使用console.log
来跟踪应用程序。
问题:日志在生产环境中
如何从代码中删除console.log
之类的行?
P.S。请不要提供find + xargs + grep -v
等文字解决方案的建议。
答案 0 :(得分:4)
对于我的重要项目,我有自己的日志记录功能,内部使用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()
的所有调用。这是我选择利用的优化。也许您可以分享为什么您不会考虑这种类型的优化。
答案 1 :(得分:3)
好吧,您可以使用
禁用它们console.log=function(){}
但是你可以手动删除这些线条。
答案 2 :(得分:2)
如果您使用Grunt,您可以添加任务以删除/注释console.log语句。 因此,不再调用console.log。
答案 3 :(得分:0)
是的,我有类似的情况,我在这里发布了它。 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");