溫馨提示×

Ubuntu Node.js應用如何進行日志輪轉

小樊
46
2025-08-21 21:42:28
欄目: 編程語言

在Ubuntu系統中,對Node.js應用的日志進行輪轉(log rotation)是一個常見的需求,以確保日志文件不會無限增長,占用過多磁盤空間。以下是幾種實現日志輪轉的方法:

方法一:使用 logrotate 工具

Ubuntu系統自帶 logrotate 工具,可以方便地對日志文件進行輪轉、壓縮和刪除舊日志。以下是如何配置 logrotate 來管理Node.js應用的日志:

  1. 創建日志目錄和日志文件(如果尚未創建):

    mkdir -p /var/log/myapp
    touch /var/log/myapp/myapp.log
    
  2. 創建 logrotate 配置文件: 在 /etc/logrotate.d/ 目錄下創建一個新的配置文件,例如 myapp

    sudo nano /etc/logrotate.d/myapp
    
  3. 配置 logrotate: 在配置文件中添加以下內容:

    /var/log/myapp/myapp.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 640 root adm
    }
    

    解釋:

    • daily: 每天輪轉一次日志。
    • rotate 7: 保留7個輪轉日志文件。
    • compress: 壓縮舊日志文件。
    • delaycompress: 延遲壓縮,直到下一次輪轉。
    • missingok: 如果日志文件不存在,不會報錯。
    • notifempty: 如果日志文件為空,不進行輪轉。
    • create 640 root adm: 創建新日志文件時設置權限和所有者。
  4. 測試配置: 運行以下命令測試 logrotate 配置是否正確:

    sudo logrotate -f /etc/logrotate.d/myapp
    

方法二:在Node.js應用中使用 winstonpino 等日志庫

如果你希望在Node.js應用內部處理日志輪轉,可以使用 winstonpino 等日志庫。這些庫提供了內置的日志輪轉功能。

使用 winston

  1. 安裝 winstonwinston-daily-rotate-file

    npm install winston winston-daily-rotate-file
    
  2. 配置 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!');
    

使用 pino

  1. 安裝 pinopino-pretty

    npm install pino pino-pretty
    
  2. 配置 pino

    const pino = require('pino');
    const prettyPrint = require('pino-pretty');
    
    const logger = pino({
        level: 'info',
        transport: {
            target: 'pino-pretty',
            options: {
                colorize: true
            }
        }
    });
    
    logger.info('Hello, world!');
    

方法三:使用 systemd 服務管理日志

如果你使用 systemd 管理Node.js應用,可以在服務文件中配置日志輪轉。

  1. 創建 systemd 服務文件

    sudo nano /etc/systemd/system/myapp.service
    
  2. 配置服務文件

    [Unit]
    Description=My Node.js Application
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /path/to/your/app.js
    Restart=always
    User=youruser
    Group=yourgroup
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=myapp
    
    [Install]
    WantedBy=multi-user.target
    
  3. 重新加載 systemd 配置并啟動服務

    sudo systemctl daemon-reload
    sudo systemctl start myapp
    sudo systemctl enable myapp
    
  4. 配置 rsyslog 進行日志輪轉: 編輯 /etc/rsyslog.conf 或創建一個新的配置文件 /etc/rsyslog.d/50-default.conf,添加以下內容:

    if $programname == 'myapp' then /var/log/myapp.log
    & stop
    
  5. 重啟 rsyslog 服務

    sudo systemctl restart rsyslog
    

通過以上方法,你可以有效地管理Node.js應用的日志輪轉,確保日志文件不會過大,同時保留必要的歷史記錄。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女