首页主机资讯Node.js在Ubuntu中的日志输出方式

Node.js在Ubuntu中的日志输出方式

时间2025-12-12 14:52:04发布访客分类主机资讯浏览769
导读:Node.js 在 Ubuntu 的日志输出方式 一 内置方式与简单场景 使用 console.log / console.error 输出到标准输出(stdout/stderr),适合开发调试。部署到 Ubuntu 时,若直接运行,日志...

Node.js 在 Ubuntu 的日志输出方式

一 内置方式与简单场景

  • 使用 console.log / console.error 输出到标准输出(stdout/stderr),适合开发调试。部署到 Ubuntu 时,若直接运行,日志会打印到当前终端;若通过服务运行,需结合下文 systemd 或进程管理器的日志功能进行收集与持久化。

二 使用日志库结构化输出

  • 使用 winston 实现多目标输出与级别管理(控制台、文件等),可按环境切换格式与级别,便于生产使用。
  • Express 中配合 morgan 输出 HTTP 访问日志,将请求日志单独写入文件,业务日志由 winston 管理,职责清晰。
  • 示例(winston + morgan,按环境配置级别):
    • 安装依赖:npm install winston morgan
    • 代码示例:
      • const winston = require(‘winston’); const express = require(‘express’); const morgan = require(‘morgan’); const fs = require(‘fs’); const path = require(‘path’);

        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() } )); }

        const app = express(); const accessLogStream = fs.createWriteStream( path.join(__dirname, ‘logs’, ‘access.log’), { flags: ‘a’ } ); app.use(morgan(‘combined’, { stream: accessLogStream } ));

        app.get(‘/’, (req, res) => { logger.info(‘Hello World’); res.send(‘Hello World’); } );

        app.listen(3000, () => logger.info(‘Server listening on 3000’));

    • 运行:LOG_LEVEL=debug node app.js(开发环境输出更详细日志)。

三 使用进程管理器与 systemd 管理日志

  • 使用 PM2:提供开箱即用的日志聚合、按应用查看与按时间过滤等能力。
    • 常用命令:
      • 启动:pm2 start app.js --name my-app
      • 查看:pm2 logs my-app
      • 实时跟踪:pm2 logs my-app --raw --timestamp
  • 使用 systemd(将应用日志接入 journald/syslog):
    • 在单元文件 [Service] 中设置:
      • StandardOutput=syslog
      • StandardError=syslog
      • SyslogIdentifier=yourapp
    • 之后可通过 journalctl 查看:journalctl -u yourapp.service -f
    • 适合系统级托管与集中化日志采集。

四 日志轮转与运维要点

  • 文件轮转:避免单日志过大,使用 logrotatewinston-daily-rotate-file
    • 示例(winston-daily-rotate-file):
      • const DailyRotateFile = require(‘winston-daily-rotate-file’); const transport = new DailyRotateFile({ filename: ‘application-%DATE%.log’, datePattern: ‘YYYY-MM-DD-HH’, zippedArchive: true, maxSize: ‘20m’, maxFiles: ‘14d’ } ); const logger = winston.createLogger({ level: ‘info’, format: winston.format.combine( winston.format.timestamp({ format: ‘YYYY-MM-DD HH:mm:ss’ } ), winston.format.json() ), transports: [transport, new transports.Console({ format: format.simple() } )] } );
  • 级别与环境:通过环境变量(如 LOG_LEVEL)控制日志级别,开发环境输出 debug,生产环境输出 info/warn/error
  • 分析与集中:小规模可用 Logwatch/Analog 做日报;中大型建议接入 ELK Stack(Elasticsearch, Logstash, Kibana)Graylog 做检索、可视化与告警。

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


若转载请注明出处: Node.js在Ubuntu中的日志输出方式
本文地址: https://pptw.com/jishu/770541.html
如何在Ubuntu中优化Node.js日志记录 如何在Ubuntu中设置Node.js日志

游客 回复需填写必要信息