插件窝 干货文章 Linux下JS日志如何管理

Linux下JS日志如何管理

日志 Winston log JavaScript 926    来源:    2025-05-04

Linux下JavaScript日志管理方案

作为IT工程师,在Linux环境下管理JavaScript日志需要考虑多个方面。以下是全面的解决方案:

一、基础日志记录方案

1. 控制台日志

// 不同级别日志
console.log('普通信息');
console.warn('警告信息');
console.error('错误信息');
console.debug('调试信息');

2. 文件日志

使用Node.js内置模块:

const fs = require('fs');
const util = require('util');
const logFile = fs.createWriteStream('app.log', { flags: 'a' });

function log(...args) {
  const timestamp = new Date().toISOString();
  logFile.write(`${timestamp} - ${util.format(...args)}\n`);
}

log('应用程序启动');

二、专业日志库推荐

1. Winston

npm install winston
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'combined.log' }),
    new winston.transports.File({ 
      filename: 'errors.log', 
      level: 'error' 
    })
  ]
});

logger.info('信息日志');
logger.error('错误日志');

2. Bunyan

npm install bunyan
const bunyan = require('bunyan');
const log = bunyan.createLogger({
  name: 'myapp',
  streams: [
    {
      level: 'info',
      path: '/var/log/myapp.log'
    }
  ]
});

log.info('应用程序启动');

三、日志轮转方案

1. 使用logrotate

创建配置文件 /etc/logrotate.d/myapp

/var/log/myapp.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 root root
    sharedscripts
    postrotate
        /usr/bin/killall -HUP node
    endscript
}

2. 使用Winston的日志轮转

npm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');

logger.add(new DailyRotateFile({
  filename: 'application-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
}));

四、集中式日志管理

1. ELK Stack (Elasticsearch, Logstash, Kibana)

配置Logstash接收Node.js日志:

input {
  file {
    path => "/var/log/myapp.log"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

2. 使用PM2日志管理

npm install pm2 -g
pm2 start app.js --log /var/log/app.log
pm2 logs # 查看日志
pm2 flush # 清空日志

五、最佳实践建议

  1. 日志级别:合理使用不同日志级别(DEBUG, INFO, WARN, ERROR)
  2. 结构化日志:使用JSON格式便于后续分析
  3. 敏感信息:避免记录密码、密钥等敏感信息
  4. 性能考虑:异步写入日志避免阻塞主线程
  5. 日志清理:设置合理的日志保留策略

六、监控与分析工具

  1. Grafana:可视化日志数据
  2. Sentry:错误监控平台
  3. Prometheus + Grafana:指标监控
  4. Graylog:专业的日志管理平台

通过以上方案,您可以在Linux环境下高效地管理JavaScript应用程序的日志,确保系统可观测性和故障排查能力。