我的代码中有很多console.log
(或任何其他控制台调用),我只想使用它们
当我的应用程序处于某种“调试模式”时。
我似乎无法使用某种记录器功能并在内部使用console.log
因为那时我不知道是什么行触发了它。也许只有try / catch,但我的日志非常通用,我不想在我的代码中尝试/ catch。
你会推荐什么?
答案 0 :(得分:49)
我可能会滥用JavaScript short-circuiting的logical AND operator性质并替换以下实例:
console.log("Foo.");
使用:
DEBUG && console.log("Foo.");
假设DEBUG
是一个全局变量,如果启用调试,则计算结果为true
。
此策略可避免中断console.log()
,因此如果您确实需要(例如,跟踪调试模式中未发生的问题),您仍可以在发布模式下调用它。
答案 1 :(得分:45)
只需将console.log替换为空函数即可生成。
if (!DEBUG_MODE_ON) {
console = console || {};
console.log = function(){};
}
答案 2 :(得分:28)
讨论全球职能通常是一个坏主意。
相反,您可以使用console.log
替换代码中LOG
的所有实例,并在代码的开头替换:
var LOG = debug ? console.log.bind(console) : function () {};
如果需要,这仍然会显示正确的行号,并保留第三方内容的预期console.log
功能。
答案 3 :(得分:14)
现在,在2014年,我只是使用GULP(并推荐所有人,这是一个了不起的工具),我安装了一个名为stripDebug的软件包。您。
(我还在生产中使用uglify
和closureCompiler
)
答案 4 :(得分:4)
另一种在生产中禁用console.log并使其保持开发的方法。
// overriding console.log in production
if(window.location.host.indexOf('localhost:9000') < 0) {
console.log = function(){};
}
您可以更改开发设置,例如localhost和port。
答案 5 :(得分:1)
简单。
添加一个小的bash脚本,找到对console.log
的所有引用并删除它们。
确保此批处理脚本作为部署到生产的一部分运行。
不要将console.log
称为空函数,这会浪费计算和空间。
答案 6 :(得分:0)
此代码适用于我:
if(console=='undefined' || !console || console==null) {
var console = {
log : function (string) {
// nothing to do here!!
}
}
}
答案 7 :(得分:0)
最新版本的chrome显示哪个文件行触发了console.log。如果您正在寻找日志管理系统,可以尝试logeek它允许您控制要查看的日志组。
答案 8 :(得分:0)
// In Development:
var debugMode = true
// In Prod:
var debugMode = false
// This function logs console messages when debugMode is true .
function debugLog(logMessage) {
if (debugMode) {
console.log(logMessage);
}
}
// Use the function instead of console.log
debugLog("This is a debug message");
答案 9 :(得分:0)
这个微小的包装器覆盖将包含原始console.log
方法,其中包含一个内部检查的函数,您可以从外部进行控制,如果您想查看控制台日志,则加深。
我选择window.allowConsole
作为示例标志,但在现实生活中使用它可能是另一回事。取决于你的框架。
(function(cl){
console.log = function(){
if( window.allowConsole )
cl(...arguments);
}
})(console.log)
// in development (allow logging)
window.allowConsole = true;
console.log(1,[1,2,3],{a:1});
// in production (disallow logging)
window.allowConsole = false;
console.log(1,[1,2,3],{a:1});
此覆盖应实现为&#34; high&#34;尽可能在代码层次结构中,以便#34; catch&#34;之前发生的所有日志。这可以扩展到所有其他console
方法,例如warn
,time
,dir
等等。
答案 10 :(得分:0)
控制台不仅可以记录日志,还可以显示错误警告等。 这是一个覆盖所有控制台输出的功能
(function () {
var method;
var noop = function noop() { };
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});
while (length--) {
method = methods[length];
console[method] = noop;
}
}());
在这里参考详细的帖子 https://stapp.space/disable-javascript-console-on-production/
答案 11 :(得分:0)
如果您使用Webpack,则可以将Terser plugin与drop_console
或pure_funcs
选项一起使用。
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true
}
}
}),
]