自定義 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
。
winston
winston
是一個非常流行的日志庫,支持多種傳輸方式和自定義格式。
首先,安裝 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 });
pino
pino
是一個高性能的日志庫,支持結構化日志和自定義格式。
首先,安裝 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
。選擇適合你項目需求的方法,并根據需要進行配置和擴展。