Javascript 提供不同级别调试代码的结构

Javascript structure to provide varying levels of debugging code with ease

与许多项目一样,我的 [研究] 计划正在变得非常庞大。我也在努力完成工作和教学之间的斗争。我想有不同数量的 console.log() 语句,只需更改全局变量或类似变量。这类似于在某些 terminal/console 命令中键入 --v(或类似于 VERBOSE)以获取有关过程中发生的事情的额外帮助。这样对于正常工作,我可以将级别设置为 Normal,但是当我让学生参与项目时,我可以让他们将级别设置为 Verbose 这样他们就可以看到发生了什么帮助赶上进度,因为并非所有学生都熟悉 JS 及其幽默:)

JS 已经为代码中的不同消息强度提供 console.log()console.warn()console.error(),但我正在寻找类似于 normal.console.log() 的东西, 30ThousandFootHighLevel.console.log()giveMeEverythingYouGot.console.log() 这样我就可以在整个应用程序中包含适当的级别。然后,我会在像地方这样的全球范围内说 consoleLogLevel = 3; // 0-N with N being the most verbose.

如果我不必写每个日志级别,而是在 giveMeEverythingYouGot.console.log() 显示所有 [lower/inclusive/previous] 级别时获得奖励积分。

有节点包吗?硬代码示例? 这是一个基本的 PLNKR 设置以帮助提供建议。谢谢!

var consoleLogArray = ['NORMAL','MIDDLE','VERBOSE'];
var consoleLogLevel = 3;

$(document).ready( function(){
  // Got to let me know we are starting in some cases
  console.log('VERBOSE MERSSAGE: Started');
  // Some Basic code
  var x = 5;
  var y = 10;
  var check = 2;
  if (!x+y === 14){
    // This should be a verbose log
    // This should only show in Verbose setting
    console.error('We have a variable assignment problem')
  }
  if(x/y === check){
    // This should be a middle level
    // This should only show in Verbose setting or Middle Setting
    console.log('Yup, 10 divided by 5 is still 2...') 
  }      
  // This should be a normal level
  // This should show in Normal, Middle, and Verbose settings
  console.log('Finished with no errors!'); 
})

我不明白您如何将 verbosemiddlenormal 分配给这些日志消息。但我假设您在编写日志语句时知道您希望它达到哪个级别。

那么,这个怎么样?

log = {
    order: {
        "verbose": 0,
        "debug": 1,
        "warn": 2
    },

    log_level: "warn",

    verbose: function (arguments) {
        if (this.order[this.log_level] <= this.order["verbose"]) {
            console.log(arguments);
        }
    },

    debug: function (arguments) {
        if (this.order[this.log_level] <= this.order["debug"]) {
            console.log(arguments);
        }
    },

    warn: function (arguments) {
        if (this.order[this.log_level] <= this.order["warn"]) {
            console.log(arguments);
        }
    }
}

log.verbose("This is verbose"); // doesn't print
log.debug("This is debug");     // doesn't print
log.warn("This is warn");       // prints

log.log_level = "verbose";      // change what level of messages we want

log.verbose("This is verbose"); // prints
log.debug("This is debug");     // prints
log.warn("This is warn");       // prints

这样日志语句是语义化的。要发送详细日志,您可以调用该名称的函数:log.verbose。您可以通过扩展 order 对象来添加任意多个级别。

每个日志记录函数(verbosedebugwarn)的功能几乎相同。我相信您可以编写一些生成这些函数的高级函数。让我们把它留作 reader 的练习。 :)