在Linux系統中,JavaScript(Node.js)日志格式并沒有一個統一的“標準”格式,但是通常會包含一些關鍵的信息,如時間戳、日志級別、消息等。以下是Node.js日志的一些常見格式和特點:
日志記錄的時間,通常以ISO 8601格式表示。
表示日志的重要性,例如INFO、WARN、ERROR等。
描述日志事件的詳細信息。
一個典型的Node.js日志示例可能如下所示:
2021-08-15T08:30:00.123Z [INFO] Starting server on port 3000
2021-08-15T08:31:23.456Z [ERROR] Failed to connect to database: Error: connect ECONNREFUSED 127.0.0.1:5432
2021-08-15T08:32:15.789Z [WARN] Low disk space on /data
2021-08-15T08:33:00.123Z [INFO] Server is running at http://localhost:3000
開發人員可以使用不同的日志庫來定義和格式化日志輸出。例如,使用 morgan 中間件或 winston 日志庫可以很方便地自定義日志格式。
const morgan = require('morgan');
const express = require('express');
const app = express();
morgan.token('customFormat', function (req, res) {
return `{req.method} {req.url} {res.statusCode} {req.ip} - ${req.headers['user-agent']} `;
});
app.use(morgan('customFormat'));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
const winston = require('winston');
const customFormat = winston.format.combine(
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message }) => {
return `${timestamp} ${level} : ${message}`;
})
);
const logger = winston.createLogger({
level: 'info',
format: customFormat,
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
logger.info('Hello World!');
logger.error('Something went wrong!');
通過上述方法,開發人員可以根據具體需求靈活地定義日志格式,以滿足應用程序的日志記錄需求。