首页主机资讯Node.js在Ubuntu上如何处理日志

Node.js在Ubuntu上如何处理日志

时间2025-11-25 15:43:03发布访客分类主机资讯浏览1014
导读:Node.js 在 Ubuntu 的日志处理实践 一 日志输出方式与位置 使用 console.log / console.error 输出到控制台,适合开发调试;在生产环境建议接入日志库或进程管理器进行持久化与分割。 使用日志库: W...

Node.js 在 Ubuntu 的日志处理实践

一 日志输出方式与位置

  • 使用 console.log / console.error 输出到控制台,适合开发调试;在生产环境建议接入日志库或进程管理器进行持久化与分割。
  • 使用日志库:
    • Winston:多传输、易配置,适合大多数场景。
    • Pino:高性能,适合高并发。
    • Bunyan:结构化 JSON 输出,便于检索分析。
    • Log4js:功能丰富、可灵活配置。
  • 常见日志路径:
    • 应用项目目录下的 logs/ 或自定义目录。
    • 系统目录 /var/log/(若按系统服务或约定存放)。
    • 使用 PM2 时,日志默认在 $HOME/.pm2/logs/(如:app-out.log、app-err.log)。
  • 查看与分析:使用 tail -f /path/to/file.log 实时查看,或用 less/cat 浏览;定位异常时关注错误类型、消息与堆栈跟踪。

二 日志轮转与保留策略

  • 应用内轮转:使用 winston-daily-rotate-file 等库按天或按大小切分,控制单文件体积与保留数量,便于快速回滚与归档。
  • 系统级轮转:使用 logrotate 管理日志的轮转、压缩与清理,适合统一运维规范。示例配置(/etc/logrotate.d/nodejs):
    • 路径:/var/log/nodejs/*.log
    • 策略:daily(每日轮转)、rotate 7(保留 7 天)、compress(压缩)、missingok(缺失不报错)、notifempty(空文件不轮转)、create 0640 root adm(新建文件权限与属主)。

三 进程管理与系统日志集成

  • 使用 PM2 管理进程与日志:
    • 安装:npm install pm2 -g
    • 启动:pm2 start app.js --name my-app
    • 查看:pm2 logs my-app(实时聚合 stdout/stderr),支持日志文件分割与时间戳。
  • 使用 systemd 托管 Node.js 服务:
    • 将日志输出到 stdout/stderr,通过 journalctl 查看与检索:
      • 实时查看:journalctl -u your-nodejs.service -f
      • 按时间筛选:journalctl -u your-nodejs.service --since “2025-11-24 00:00:00”
  • Rsyslog 集成:可将应用日志发送到系统日志,统一由 rsyslog 进行过滤、转发与存储(适合多服务集中)。

四 结构化与集中式日志

  • 结构化日志:优先输出 JSON(如 Winston/Pino/Bunyan),在日志中携带 timestamp、level、service、trace_id 等字段,便于检索、聚合与链路追踪。
  • 集中式日志:将日志发送到 ELK Stack(Elasticsearch, Logstash, Kibana)Graylog 等平台,实现跨服务统一检索、可视化与告警;高吞吐场景可结合 Kafka 等消息队列缓冲。
  • 监控与可视化:除日志外,结合 Prometheus + Grafana 暴露指标(请求时延、错误率、内存/CPU),与日志联动定位问题。

五 快速上手示例

  • 使用 Winston 写入文件并区分错误与合并日志:
    • 安装:npm install winston
    • 代码示例:
      • const winston = require(‘winston’);
        const logger = winston.createLogger({
        level: ‘info’,
        format: winston.format.json(),
        transports: [
        new winston.transports.File({ filename: ‘error.log’, level: ‘error’ } ),
        new winston.transports.File({ filename: ‘combined.log’ } )
        ]
        } );
        if (process.env.NODE_ENV !== ‘production’) {
        logger.add(new winston.transports.Console({ format: winston.format.simple() } ));
        }
        logger.info(‘Server started on port 3000’);
        logger.error(‘Database connection failed’);
  • 查看日志:在项目目录执行 tail -f combined.logtail -f error.log 实时观察输出。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Node.js在Ubuntu上如何处理日志
本文地址: https://pptw.com/jishu/755637.html
如何用Debian cpustat进行系统安全监控 Debian cpustat在大数据处理中的应用

游客 回复需填写必要信息