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