在Linux下,Node.js應用程序的日志輪轉可以通過多種方式實現。以下是一些常見的方法:
logrotate 工具logrotate 是一個非常強大的日志管理工具,可以自動輪轉、壓縮和刪除日志文件。
logrotate大多數Linux發行版默認已經安裝了 logrotate,如果沒有,可以使用包管理器進行安裝:
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
logrotate創建或編輯 /etc/logrotate.d/your_app 文件,添加以下內容:
/path/to/your/nodejs/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
解釋:
daily: 每天輪轉一次日志。rotate 7: 保留7個輪轉日志文件。compress: 壓縮舊的日志文件。delaycompress: 延遲壓縮,直到下一次輪轉。missingok: 如果日志文件丟失,不要報錯。notifempty: 如果日志文件為空,不進行輪轉。create 640 root adm: 創建新的日志文件,權限為640,屬主為root,屬組為adm。pm2 管理Node.js應用pm2 是一個流行的Node.js進程管理工具,它內置了日志管理功能,包括日志輪轉。
pm2npm install pm2 -g
pm2 start app.js --name your_app
pm2 set pm2:logrotate:max_size 10M
pm2 set pm2:logrotate:retain 7
解釋:
--name your_app: 為應用命名。pm2:logrotate:max_size 10M: 當日志文件大小達到10MB時進行輪轉。pm2:logrotate:retain 7: 保留7個輪轉日志文件。winston 和 winston-daily-rotate-file如果你使用 winston 作為日志庫,可以結合 winston-daily-rotate-file 插件實現日志輪轉。
npm install winston winston-daily-rotate-file
winstonconst winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
transport
]
});
logger.info('Hello, world!');
解釋:
filename: 日志文件的基本名稱和日期模式。datePattern: 日期模式,用于生成日志文件名。zippedArchive: 是否壓縮舊的日志文件。maxSize: 單個日志文件的最大大小。maxFiles: 保留的日志文件數量。通過以上方法,你可以在Linux下有效地管理Node.js應用程序的日志輪轉。選擇哪種方法取決于你的具體需求和應用場景。