8

场景:考虑我有多种方法执行不同的任务并由不同的开发人员处理。我正在尝试进行一个通用方法调用,如果发生错误,它会记录下来。所以需要我必须记录行号、方法名称等。

我写了一个通用函数,如下:

  function enterLog(sourcefile, methodName, LineNo)
    {
            fs.appendFile('errlog.txt', sourcefile +'\t'+ methodName +'\t'+ LineNo +'\n', function(e){
            if(e)
                console.log('Error Logger Failed in Appending File! ' + e);
        });
    }

因此,对上述方法的调用必须传递源文件、方法名称和行号。在开发过程中可能随时更改。

例如,使用硬编码值调用方法:

enterLog('hardcodedFileName.js', 'TestMethod()', '27');

问题:对所需的值(如上例)进行硬编码是否更好,或者有什么方法可以在 Node.js 中以任何方式获取方法名称和行无引用?

4

1 回答 1

7

我们在应用程序记录器中使用了一个不错的模块。您甚至可以获取行号。https://npmjs.org/package/traceback

所以你可以这样重写它:

var traceback = require('traceback');

function enterLog(sourcefile, methodName, LineNo) {
  var tb = traceback()[1]; // 1 because 0 should be your enterLog-Function itself
  fs.appendFile('errlog.txt', tb.file +'\t'+ tb.method +'\t'+ tb.line +'\n', function(e) {
    if(e) {
      console.log('Error Logger Failed in Appending File! ' + e);
    }
  });
}

只需致电:

enterLog();

从任何你想要的地方,总是得到正确的结果

编辑:另一个提示。在没有 3rd-party-module-dependencies 的 node.js 中,不硬编码文件名是最容易实现的:

var path = require('path');
var currentFile = path.basename(__filename); // where __filename always has the absolute path of the current file
于 2013-05-23T12:12:54.773 回答