在Ubuntu系統上為Node.js應用設置日志記錄策略,需圍繞日志庫選擇、日志級別控制、日志輪轉、結構化日志、異步記錄及監控等核心環節展開,以下是具體步驟:
Node.js生態中有多個成熟的日志庫,可根據需求選擇:
npm install winston
根據環境(開發/生產)設置不同日志級別,避免記錄無關信息影響性能:
debug或verbose,輸出詳細信息便于調試;warn或error,僅記錄關鍵問題。const logLevel = process.env.LOG_LEVEL || 'info'; // 默認info
const logger = winston.createLogger({ level: logLevel });
啟動應用時指定環境變量:export LOG_LEVEL=debug
node app.js
config.json):{ "logLevel": "debug" }
代碼中讀?。?pre class="hljs">const config = require('./config.json');
const logger = winston.createLogger({ level: config.logLevel });
防止日志文件過大占用磁盤空間,可使用Winston插件或Ubuntu系統工具:
npm install winston-daily-rotate-file
配置:const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: 'info',
format: format.combine(format.timestamp(), format.json()),
transports: [
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log', // 日志路徑(帶日期后綴)
datePattern: 'YYYY-MM-DD', // 按天分割
zippedArchive: true, // 壓縮舊日志
maxSize: '20m', // 單個文件最大20MB
maxFiles: '14d' // 保留14天
}),
new DailyRotateFile({
filename: '/var/log/nodejs/app-error-%DATE%.log',
datePattern: 'YYYY-MM-DD',
level: 'error', // 僅記錄error級別日志
zippedArchive: true,
maxFiles: '30d'
})
]
});
/etc/logrotate.d/nodejs:/var/log/nodejs/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
systemctl restart your-node-app.service # 可選:重啟應用以釋放文件句柄
endscript
}
采用JSON格式記錄日志,便于后續用ELK(Elasticsearch+Logstash+Kibana)、Graylog等工具分析。
Winston示例:
const logger = winston.createLogger({
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加時間戳
format.json() // 輸出JSON
),
transports: [new transports.Console(), new transports.File({ filename: 'combined.log' })]
});
日志輸出示例:
{
"timestamp": "2025-10-09 10:00:00",
"level": "info",
"message": "Application started"
}
確保日志記錄不阻塞主線程,提升應用性能。Winston、Pino等庫均默認支持異步,無需額外配置。
使用PM2管理Node.js進程時,可借助其內置日志功能:
ecosystem.config.js設置:module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
env: {
NODE_ENV: 'production',
LOG_LEVEL: 'info'
},
log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志時間格式
merge_logs: true // 合并多進程日志
}]
};
啟動應用:pm2 start ecosystem.config.js --env production
集成監控工具實時分析日志,設置警報規則:
cron定時分析日志文件,如統計錯誤次數超過閾值時發送郵件。sudo chown -R root:adm /var/log/nodejs/
sudo chmod -R 640 /var/log/nodejs/*.log
winston-mask等庫自動屏蔽敏感字段。通過以上步驟,可在Ubuntu系統上為Node.js應用構建一個高效、可維護、安全的日志記錄策略,滿足不同環境的監控與分析需求。