在Debian系統上,Node.js應用程序的日志輪轉可以通過多種方式實現。以下是一些常見的方法:
logrotate
工具logrotate
是Linux系統自帶的一個日志管理工具,可以用來自動輪轉、壓縮和刪除日志文件。
安裝logrotate
(如果尚未安裝):
sudo apt-get update
sudo apt-get install logrotate
創建一個logrotate
配置文件:
在/etc/logrotate.d/
目錄下創建一個新的配置文件,例如nodejs
:
sudo nano /etc/logrotate.d/nodejs
編輯配置文件: 在配置文件中添加以下內容,根據你的需求進行調整:
/path/to/your/nodejs/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
解釋:
daily
:每天輪轉一次日志。rotate 7
:保留7個輪轉日志。compress
:壓縮舊日志文件。delaycompress
:延遲壓縮,直到下一次輪轉。missingok
:如果日志文件不存在,不會報錯。notifempty
:如果日志文件為空,不輪轉。create 640 root adm
:創建新日志文件時的權限和所有者。測試配置:
你可以手動測試logrotate
配置是否正確:
sudo logrotate -f /etc/logrotate.d/nodejs
如果你使用的是Node.js的日志庫(如winston
、pino
等),這些庫通常內置了日志輪轉功能。
winston
示例:安裝winston
和winston-daily-rotate-file
:
npm install winston winston-daily-rotate-file
配置winston
:
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服務文件:
sudo nano /etc/systemd/system/your-node-service.service
添加日志輪轉配置:
在[Service]
部分添加以下內容:
StandardOutput=append:/path/to/your/nodejs/logs/output.log
StandardError=append:/path/to/your/nodejs/logs/error.log
SyslogIdentifier=your-node-service
重新加載Systemd配置并重啟服務:
sudo systemctl daemon-reload
sudo systemctl restart your-node-service
配置rsyslog
進行日志輪轉:
編輯/etc/rsyslog.conf
或創建一個新的配置文件(如/etc/rsyslog.d/50-default.conf
):
sudo nano /etc/rsyslog.d/50-default.conf
添加以下內容:
if $programname == 'your-node-service' then /var/log/your-node-service.log
& stop
重啟rsyslog
服務:
sudo systemctl restart rsyslog
通過以上方法,你可以在Debian系統上實現Node.js應用程序的日志輪轉。選擇適合你項目需求的方法進行配置即可。