在Node.js中,日志格式化是一个重要的环节,它可以帮助开发者更好地跟踪程序运行状态、捕获异常、定位问题并优化性能。以下是几种常见的日志格式化方法:
console 模块Node.js的内置 console 模块提供了基本的日志记录功能,可以通过自定义格式化函数来控制日志输出格式。例如:
function customFormat(level, message) {
return `[${new Date().toISOString()}] [${level.toUpperCase()}] ${message}`;
}
console.log(customFormat('INFO', 'This is an info message'));
console.error(customFormat('ERROR', 'This is an error message'));
Winston是一个非常流行的Node.js日志库,支持多种传输方式和格式化选项。以下是一个使用Winston自定义日志格式的示例:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.printf(({ timestamp, level, message }) => {
return `${timestamp} [${level.toUpperCase()}]: ${message}`;
})
),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('Hello, Winston!');
#### Morgan
Morgan是一个HTTP请求日志中间件,适用于Express应用程序。以下是一个使用Morgan自定义日志格式的示例:
```javascript
const express = require('express');
const morgan = require('morgan');
const app = express();
const morganFormat = ':method :url :status :res[content-length] - :response-time ms - :message';
app.use(morgan(morganFormat));
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
#### Bunyan
Bunyan是一个简单易用的Node.js日志库,专注于提供结构化的JSON日志输出。以下是一个使用Bunyan记录日志的示例:
```javascript
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'myapp',
streams: [
{ level: 'info', stream: process.stdout },
{ level: 'error', path: 'app-error.log' }
]
});
logger.info('Hello, Bunyan!');
logger.error('ERROR_MESSAGE');
自定义日志格式可以根据项目需求进行调整,包括日志级别、时间戳、线程ID、请求ID等信息。例如,使用模板字符串来格式化日志:
const timestamp = new Date().toISOString();
const level = 'info';
const message = 'This is a log message';
console.log(`${timestamp} [${level.toUpperCase()}] ${message}`);
通过以上方法,可以有效地在Node.js中实现日志的格式化,帮助开发者更高效地进行调试和维护。