首页主机资讯Node.js在Ubuntu上的日志记录机制是什么

Node.js在Ubuntu上的日志记录机制是什么

时间2026-01-19 21:26:04发布访客分类主机资讯浏览730
导读:Node.js 在 Ubuntu 的日志记录机制 一 核心概念与输出路径 Node.js 本身不内置持久化日志,日志由应用代码或运行时通过标准输出 stdout/stderr输出;在 Ubuntu 上,这些输出可被systemd 的 jo...

Node.js 在 Ubuntu 的日志记录机制

一 核心概念与输出路径

  • Node.js 本身不内置持久化日志,日志由应用代码或运行时通过标准输出 stdout/stderr输出;在 Ubuntu 上,这些输出可被systemd 的 journald捕获,也可由**进程管理器(如 PM2)**或应用内代码定向到文件。常见路径与方式如下:
    • 直接写到文件:应用使用 fs.createWriteStream 或日志库写入自定义路径(如 /var/log/nodejs/ 或项目内 logs/)。
    • 使用 PM2:日志集中到 ~/.pm2/logs/(如 app-out.log、app-error.log),便于统一查看与轮转。
    • 使用 systemd:将 StandardOutput/StandardError 设为 syslog/journal,通过 journalctl 查询。
    • 使用日志库:如 Winston、Pino、Bunyan、Morgan(HTTP 请求日志),支持多目标输出与结构化日志。

二 常见实现方式与最小示例

  • 使用内置 console(开发/调试)
    • 适合本地开发;生产环境建议改为文件或集中式日志。
  • 使用 Winston(通用、可多目标)
    • 支持按级别输出到控制台与文件,便于拆分 errorcombined 日志。
  • 使用 Morgan(Express HTTP 请求日志)
    • 作为中间件快速记录访问日志,常与文件流或日志库结合。
  • 使用 Pino/Bunyan(高性能、结构化)
    • 默认输出 JSON,便于机器解析与检索。

示例(Winston,含按级别拆分与开发/生产差异化输出):

const winston = require('winston');


const logger = winston.createLogger({

  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({
 filename: 'logs/error.log', level: 'error' }
),
    new winston.transports.File({
 filename: 'logs/combined.log' }
)
  ]
}
    );


if (process.env.NODE_ENV !== 'production') {

  logger.add(new winston.transports.Console({
 format: winston.format.simple() }
    ));

}


logger.info('应用启动', {
 port: 3000 }
    );

logger.error('发生错误', {
 err: new Error('示例') }
    );

三 日志轮转与保留策略

  • 使用系统级 logrotate(推荐与文件日志搭配)
    • 典型配置(/etc/logrotate.d/nodejs):
      /var/log/nodejs/*.log {
      
        daily
        missingok
        rotate 7
        compress
        notifempty
        create 0640 root adm
      }
          
      
    • 可手动测试:sudo logrotate -f /etc/logrotate.d/nodejs
  • 使用应用内轮转
    • winston-daily-rotate-file:按大小/时间切分并压缩归档,适合容器或无 systemd 场景。
  • 使用 PM2 内置日志轮转
    • 通过配置文件或命令参数设置最大文件数与保留天数,统一管理与自动切割。

四 生产环境最佳实践

  • 采用结构化日志(JSON)明确日志级别(如 error/warn/info/debug),便于检索与分析。
  • 将日志输出到持久化目录(如 /var/log/nodejs/),并确保目录与文件的权限与属主正确(如 0640 root adm)。
  • 配置日志轮转与保留策略(如按天轮转、保留 7 天、压缩归档),避免磁盘被占满。
  • systemd 服务中统一用 journald 收集 stdout/stderr,并通过 SyslogIdentifier 标识服务;开发/调试阶段可同时输出到控制台。
  • 使用 PM2 时集中日志目录、启用轮转,并结合环境变量(如 LOG_LEVEL)控制输出详细程度。

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


若转载请注明出处: Node.js在Ubuntu上的日志记录机制是什么
本文地址: https://pptw.com/jishu/786236.html
如何通过Ubuntu Node.js日志监控性能 如何优化Linux Overlay的网络传输

游客 回复需填写必要信息