温馨提示×

Debian JS日志如何清理

小樊
45
2025-12-08 11:09:46
栏目: 编程语言

Debian 上 JavaScript 日志清理与维护

一 定位日志位置

  • Node.js 应用日志:通常在应用目录的 /var/log/yourapp/ 或启动参数/配置中指定的路径,常见扩展名 .log
  • 前端构建/调试日志:位于项目工作区的 node_modules/.cache/dist/ 或构建工具配置的输出目录。
  • Web 服务器访问/错误日志(若 JS 通过 Nginx/Apache 提供服务):/var/log/nginx//var/log/apache2/
  • 建议先用 find 精确定位:
    • 查找所有 .log:sudo find / -name “*.log” 2>/dev/null
    • 按时间筛选:sudo find /var/log -type f -name “*.log” -mtime +7 2>/dev/null
      以上路径与定位方法适用于 Debian 环境下的 JS 日志管理与清理。

二 推荐做法 使用 logrotate 自动轮转

  • 安装(如未安装):sudo apt-get update && sudo apt-get install -y logrotate
  • 创建应用专属配置:sudo nano /etc/logrotate.d/nodejs
  • 示例配置(按天轮转、保留 7 天、压缩、延迟压缩、空文件不轮转、自动创建新文件):
    /var/log/yourapp/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 0640 root adm
        copytruncate
    }
    
    • 说明:
      • copytruncate 适用于不支持信号重新打开日志的进程(如部分 Node.js 应用),通过复制后截断原文件避免重启应用。
      • 若应用支持信号重开日志(如能处理 SIGUSR1),可用 postrotate 触发:
        postrotate
            [ -f /var/run/yourapp.pid ] && kill -USR1 $(cat /var/run/yourapp.pid)
        endscript
        
  • 测试与生效:
    • 手动强制执行一次:sudo logrotate -f /etc/logrotate.d/nodejs
    • 验证配置语法:sudo logrotate -d /etc/logrotate.d/nodejs
    • 说明:logrotate 通常由 /etc/cron.daily/logrotate 每日定时运行。
      以上配置与操作要点可安全、自动化地管理 Node.js 等 JS 应用的日志增长。

三 应用内日志轮转与保留策略

  • 使用日志库在代码中控制单文件大小与保留个数,避免系统级清理影响业务。
  • 示例(winston,单个文件 2MB,最多保留 7 个):
    const winston = require('winston');
    const { createLogger, format, transports } = winston;
    const { combine, timestamp, printf } = format;
    
    const myFormat = printf(({ level, message, timestamp }) => {
      return `${timestamp} ${level}: ${message}`;
    });
    
    const logger = createLogger({
      level: 'info',
      format: combine(timestamp(), myFormat),
      transports: [
        new transports.File({
          filename: 'app.log',
          maxsize: 2 * 1024 * 1024, // 2MB
          maxFiles: 7
        })
      ]
    });
    
  • 优点:与应用生命周期绑定、无需外部信号、可按业务维度精细控制。
    以上做法适合在 Node.js 中直接控制日志滚动与保留。

四 临时清理与系统日志维护

  • 临时清理(谨慎操作,优先备份):
    • 清空而不删除文件(减少 inode 变动,业务不停):sudo truncate -s 0 /var/log/yourapp/app.log
    • 删除 N 天前日志:
      • 按天:0 2 * * * find /var/log/yourapp -type f -name “*.log” -mtime +7 -delete
      • 按大小:0 2 * * * find /var/log/yourapp -type f -name “*.log” -size +100M -delete
  • 清理 systemd 日志(若 JS 运行在 systemd 服务下,也建议顺带维护):
    • 按时间保留:sudo journalctl --vacuum-time=7d
    • 按大小保留:sudo journalctl --vacuum-size=100M
  • 风险提示:
    • 避免直接删除正在写入的日志文件;优先用 truncatelogrotate 的 copytruncate
    • 删除前确认路径与条件,避免误删其他服务日志。
      以上命令可用于紧急释放空间与日常维护,但长期仍应以 logrotate 为主。

0