首页 > 编程语言 >Node日志自动化脚本处理

Node日志自动化脚本处理

来源:互联网 2026-07-19 08:06:04

自动化处理Node.js日志可通过pm2实现进程管理与日志轮转,结合winston进行细粒度控制,利用Shell或Node脚本分析日志,引入ELK或Fluentd实现集中式管理,并通过环境变量灵活配置。这些方法覆盖单机到分布式场景,提升排错与监控效率。

通过脚本自动化处理Node.js应用日志,有多种方法可供选择。以下梳理了几种常见实践路径,涵盖进程管理、日志库集成及集中式分析,帮助实现日志的收集、分析和管理。

Node日志自动化脚本处理

长期稳定更新的攒劲资源: >>>点此立即查看<<<

1. 使用 pm2 进行进程管理和日志监控

pm2 是Node.js生态中常用的进程管理工具,同时也提供日志管理功能。通过简单配置,即可实现日志的自动生成、轮转和实时查看。

安装 pm2

npm install pm2 -g

启动应用并配置日志

pm2 start app.js --name my-app

配置日志轮转

pm2 默认已处理日志轮转,如需更精细的控制,可使用 ecosystem.config.js 文件:

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    instances: 'max',
    exec_mode: 'cluster',
    log_date_format: 'YYYY-MM-DD HH:mm Z',
    out_file: './logs/out.log',
    error_file: './logs/err.log',
    merge_logs: true,
    log_level: 'info',
    time: true,
  }],
};

然后使用 pm2 start ecosystem.config.js 启动。

查看和管理日志

  • 实时日志:pm2 logs my-app
  • 查看文件日志:tail -f ./logs/out.log 或 tail -f ./logs/err.log
  • 日志轮转由 pm2 自动完成,手动清理可执行 pm2 clear my-app

2. 使用 winston 和 pm2 结合进行高级日志管理

winston 是Node.js中成熟的日志库之一,支持灵活配置多种传输方式(文件、控制台、远程服务等)和日志格式。与 pm2 配合,可应对更复杂的场景。

安装 winston

npm install winston

配置 winston

创建 logger.js 文件:

const { createLogger, format, transports } = require('winston');

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.printf(({ timestamp, level, message }) => `${timestamp} [${level.toUpperCase()}]: ${message}`)
  ),
  transports: [
    new transports.File({ filename: 'logs/error.log', level: 'error' }),
    new transports.File({ filename: 'logs/combined.log' }),
  ],
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new transports.Console({
    format: format.combine(format.colorize(), format.simple()),
  }));
}

module.exports = logger;

在应用内直接引用:

const logger = require('./logger');
logger.info('应用启动成功');
logger.error('发生错误');

结合 pm2 使用

仍使用 pm2 启动应用,winston 会按自身配置将日志写入文件,互不冲突。

3. 自动化日志分析

日志落盘后,定期用脚本分析可提取有价值信息。工具可选 grep、awk,或自行编写Node.js脚本。

示例:Shell 脚本统计错误日志数量

#!/bin/bash
ERROR_COUNT=$(grep -i "error" logs/err.log | wc -l)
INFO_COUNT=$(grep -i "info" logs/combined.log | wc -l)
echo "错误日志数量: $ERROR_COUNT"
echo "信息日志数量: $INFO_COUNT"

赋予执行权限后运行即可。

示例:Node.js 脚本生成日志报告

const fs = require('fs');
const path = require('path');

const errorLogPath = path.join(__dirname, 'logs', 'err.log');
const combinedLogPath = path.join(__dirname, 'logs', 'combined.log');

fs.readFile(errorLogPath, 'utf8', (err, data) => {
  if (err) throw err;
  const errorCount = data.split('\n').filter(line => line.includes('error')).length;
  console.log(`错误日志数量: ${errorCount}`);
});

fs.readFile(combinedLogPath, 'utf8', (err, data) => {
  if (err) throw err;
  const infoCount = data.split('\n').filter(line => line.includes('info')).length;
  console.log(`信息日志数量: ${infoCount}`);
});

4. 使用集中式日志管理系统

当应用规模扩大或分布式部署时,单机日志管理可能不足。此时推荐ELK(Elasticsearch, Logstash, Kibana)、Graylog或Fluentd等集中式方案,可跨节点收集、存储和分析日志。

示例:用 Fluentd 收集 Node.js 日志

  1. 安装 Fluentd:

    sudo apt-get update
    sudo apt-get install fluentd
  2. 配置 Fluentd:编辑 /etc/td-agent/td-agent.conf,添加输入(tail方式读取日志文件)和输出(转发到Elasticsearch):

    
      @type tail
      path /path/to/your/node/logs/*.log
      pos_file /var/log/td-agent/nodejs.log.pos
      tag nodejs.*
      
        @type none
      
    
    
    
      @type elasticsearch
      host localhost
      port 9200
      logstash_format true
      flush_interval 10s
    
  3. 重启 Fluentd:sudo systemctl restart td-agent

  4. 在Node.js中给winston添加Fluentd传输(需安装winston-fluent等插件),将日志打上标签发送出去。

5. 使用环境变量和配置文件管理日志设置

为提升日志配置的灵活性,可使用环境变量或配置文件控制日志级别、输出路径等。这样开发、测试、生产环境可各自设置,无需修改代码。

示例:用环境变量配置 winston

修改 logger.js,从环境变量读取:

const { createLogger, format, transports } = require('winston');
const logLevel = process.env.LOG_LEVEL || 'info';
const logFile = process.env.LOG_FILE || 'combined.log';

const logger = createLogger({
  level: logLevel,
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.printf(({ timestamp, level, message }) => `${timestamp} [${level.toUpperCase()}]: ${message}`)
  ),
  transports: [
    new transports.File({ filename: logFile }),
  ],
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new transports.Console({
    format: format.combine(format.colorize(), format.simple()),
  }));
}

module.exports = logger;

启动时:

LOG_LEVEL=debug LOG_FILE=./logs/debug.log node app.js

总结

自动化处理Node.js日志的路径有多种——从pm2的轻量管理,到winston的细粒度控制,再到ELK或Fluentd的集中式分析。关键在于根据应用规模和运维需求选择合适方案。以上方法基本覆盖从单机到分布式的大多数场景。管理好日志,可显著提升排错和监控效率。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备2026025700号-3 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。