在Linux系統下,為Node.js應用程序設置日志自動清理機制可以通過多種方式實現。以下是幾種常見的方法:
logrotate
工具logrotate
是一個非常強大的日志管理工具,可以自動輪轉、壓縮、刪除和郵寄日志文件。
安裝logrotate
(如果尚未安裝):
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
創建或編輯logrotate
配置文件:
通常,Node.js應用程序的日志文件位于/var/log/nodejs/
目錄下。你可以創建一個新的配置文件或編輯現有的配置文件。
sudo nano /etc/logrotate.d/nodejs
添加配置內容:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
解釋:
daily
: 每天輪轉日志。missingok
: 如果日志文件丟失,不會報錯。rotate 7
: 保留7個輪轉后的日志文件。compress
: 壓縮輪轉后的日志文件。notifempty
: 如果日志文件為空,不進行輪轉。create 0640 root adm
: 創建新的日志文件,權限為0640,屬主為root,屬組為adm。測試配置:
sudo logrotate -f /etc/logrotate.d/nodejs
如果你使用的是Node.js的日志庫(如winston
或pino
),可以在應用程序代碼中設置日志輪轉。
winston
和winston-daily-rotate-file
安裝依賴:
npm install winston winston-daily-rotate-file
配置日志記錄器:
const 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!');
如果你使用systemd
來管理Node.js應用程序,可以創建一個自定義的systemd
服務文件,并在其中設置日志輪轉。
創建systemd
服務文件:
sudo nano /etc/systemd/system/nodejs.service
添加服務配置:
[Unit]
Description=Node.js Application
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/your/app.js
WorkingDirectory=/path/to/your/app
User=youruser
Group=yourgroup
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=yourapp
Restart=always
[Install]
WantedBy=multi-user.target
重新加載systemd
配置:
sudo systemctl daemon-reload
啟動并啟用服務:
sudo systemctl start nodejs
sudo systemctl enable nodejs
通過以上方法,你可以為Node.js應用程序設置日志自動清理機制,確保日志文件不會無限增長,同時保持系統的整潔和高效。