用于打印多个参数以便记录

时间:2017-08-08 07:19:09

标签: javascript node.js

我正在尝试编写一个通用日志函数,它将接受可变长度的字符串和对象类型的参数,并使用与模块和子模块相关的一些元数据打印它们。但是,我无法找到将所有参数打印在一起的方法。目前我正在这样做。

// MODULE_NAME is different for every module of my project, so
// that I know which module the log belongs to.

function myLogger() {
  for (var i = 0; i < arguments.length; i++) {
    console.log(MODULE_NAME, ":", arguments[i]);
  }
}

我正在寻找一种更好的方法来实现以下示例。

// MODULE_NAME = "TEST"
myLogger("error");
myLogger("error", err, ", result", res);
myLogger("hello", "world");

上述调用的输出应为

TEST : error
TEST : error {obj}, result {obj} 
TEST : hello world

2 个答案:

答案 0 :(得分:1)

console.log实际上接受可变参数。你可以做点什么

function myLogger(...args) {
  console.log(MY_MODULE, ...args);
}

将所有参数直接传递给console.log。

如果您的生活公司很糟糕并且您无法使用现代JS(使用转换程序),则可以使用.apply()

function myLogger() {
  console.log.apply(console, [MY_MODULE].concat(arguments));
}

答案 1 :(得分:0)

您可以使用winston logger.Through,您可以生成五个不同级别的日志。请参阅下面的代码:

const winston = require('winston');
const fs = require('fs');
const env = process.env.NODE_ENV || 'development';
const logDir = 'log';
// Create the log directory if it does not exist
if (!fs.existsSync(logDir)) {
    fs.mkdirSync(logDir);
}
const tsFormat = () => (new Date()).toLocaleTimeString();
const logger = new(winston.Logger)({
    transports: [
        // colorize the output to the console
        new(winston.transports.Console)({
            timestamp: tsFormat,
            colorize: true,
            level: 'info'
        }),
        new(require('winston-daily-rotate-file'))({
            filename: `${logDir}/-results.log`,
            timestamp: tsFormat,
            datePattern: 'yyyy-MM-dd',
            prepend: true,
            level: env === 'development' ? 'verbose' : 'info'
        })
    ]
});
 logger.debug('Debugging info');
 logger.verbose('Verbose info');
 logger.info('Hello world');
 logger.warn('Warning message');
 logger.error('Error info');