在 Node.js 中,可以使用第三方库 winston 或内置的 console 模块来定制日志格式与输出。下面分别介绍这两种方法。
winston:npm install winston
logger.js 文件,设置自定义日志格式和输出:const { createLogger, format, transports } = require('winston');
const myFormat = format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
})
);
const logger = createLogger({
level: 'info',
format: myFormat,
transports: [
new transports.Console(),
new transports.File({ filename: 'logs/error.log', level: 'error' }),
new transports.File({ filename: 'logs/combined.log' })
]
});
module.exports = logger;
在这个例子中,我们定义了一个自定义格式,包括时间戳、日志级别和消息。然后,我们将这个格式应用到 createLogger 函数中,并将日志输出到控制台和两个不同的文件中。
logger:const logger = require('./logger');
logger.info('Hello, world!');
logger.error('An error occurred');
虽然内置的 console 模块没有直接支持自定义格式,但可以通过一些技巧来实现。例如,可以使用 console.log 的占位符功能来自定义输出格式:
function log(level, message) {
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19);
console.log(`[${timestamp}] [${level.toUpperCase()}]: ${message}`);
}
log('info', 'Hello, world!');
log('error', 'An error occurred');
这种方法虽然简单,但可能不如使用 winston 等第三方库灵活。如果需要更多的功能,建议使用 winston。