Javascript:控制台日志记录

时间:2012-08-25 20:45:37

标签: javascript logging

我在JS文件中使用console.log来跟踪应用程序。

问题:日志在生产环境中 如何从代码中删除console.log之类的行?

P.S。请不要提供find + xargs + grep -v等文字解决方案的建议。

4 个答案:

答案 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。

https://www.npmjs.org/package/grunt-remove-logging-calls

答案 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");