自定义 Node.js 日志格式可以帮助你更好地分析和监控应用程序的运行状态。以下是几种常见的方法来自定义 Node.js 日志格式:
console.log 自定义格式虽然 console.log 本身不支持复杂的格式化,但你可以通过模板字符串来简单地自定义输出格式:
const timestamp = new Date().toISOString();
const message = 'User logged in';
const userId = 123;
console.log(`${timestamp} [INFO] ${message} - User ID: ${userId}`);
有许多成熟的第三方日志库提供了丰富的功能来自定义日志格式,例如 winston 和 pino。
winstonwinston 是一个非常流行的日志库,支持多种传输方式和自定义格式。
首先,安装 winston:
npm install winston
然后,配置 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('User logged in', { userId: 123 });
pinopino 是一个高性能的日志库,支持结构化日志和自定义格式。
首先,安装 pino:
npm install pino
然后,配置 pino:
const pino = require('pino');
const prettyPrint = require('pino-pretty');
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'SYS:standard'
}
}
});
logger.info('User logged in', { userId: 123 });
morgan 进行 HTTP 请求日志如果你需要记录 HTTP 请求日志,可以使用 morgan 中间件。
首先,安装 morgan:
npm install morgan
然后,在 Express 应用中使用 morgan:
const express = require('express');
const morgan = require('morgan');
const app = express();
app.use(morgan(':method :url :status :res[content-length] - :response-time ms'));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
你可以通过自定义 morgan 的格式来改变日志输出:
const morgan = require('morgan');
const customFormat = ':method :url :status :res[content-length] - :response-time ms :user-agent';
app.use(morgan(customFormat));
自定义 Node.js 日志格式可以通过多种方式实现,包括使用 console.log、第三方日志库如 winston 和 pino,以及 HTTP 请求日志库如 morgan。选择适合你项目需求的方法,并根据需要进行配置和扩展。