首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
如何在Ubuntu中设置Node.js日志

如何在Ubuntu中设置Node.js日志

热心网友
22
转载
2026-05-02

Ubuntu 服务器 Node.js 日志配置与管理最佳实践指南

如何在Ubuntu中设置Node.js日志

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

一 日志方案选型与对比

在 Ubuntu 环境中部署 Node.js 应用时,选择合适的日志记录方案是确保系统可观测性的关键第一步。开发者通常可以从以下几个层面进行选择:

最基础的方法是直接使用 Node.js 内置的 console 模块,包括 console.logconsole.error 等方法。这种方式在开发调试阶段非常便捷,所有信息直接输出到标准输出流。然而,对于生产环境而言,其缺乏日志分级、持久化、格式化等关键功能。

因此,采用专业的 Node.js 日志库成为主流选择。以下是几个在 Ubuntu 服务器上表现优异的流行库:

  • winston:功能全面的日志库,支持多种传输方式(控制台、文件、HTTP等),特别擅长处理结构化日志,适合复杂的生产环境。
  • morgan:Express 框架专用的 HTTP 请求日志中间件,通常与文件流结合实现访问日志的持久化存储。
  • pino:以极致性能著称的日志库,JSON 输出格式高效,非常适合对性能敏感的高并发生产环境。
  • log4js:配置高度灵活的日志库,支持按文件大小或日期自动切割日志,并能同时输出到多个目的地。

除了应用层级的日志库,还可以借助进程管理工具来统一管理日志输出。Ubuntu 系统上常用的方案包括:

  • PM2:强大的 Node.js 进程管理器,内置日志管理功能,可以轻松分离标准输出与错误输出,支持按应用查看和实时日志流。
  • systemd:Ubuntu 系统自带的初始化系统和服务管理器。通过 systemd 服务配置,可以将应用日志无缝集成到 journald 或 syslog,实现系统级的集中化日志收集、查询和自动轮转。

二 应用内日志库配置详解

掌握理论后,我们通过具体配置示例来演示如何在 Ubuntu 系统的 Node.js 应用中实现高效的日志记录。

使用 winston 实现控制台与文件日志分级输出

首先,通过 npm 安装 winston:npm install winston

接下来,创建一个可根据环境动态配置的日志记录器,实现错误日志与综合日志的分离存储:

const winston = require('winston');
const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    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('Hello World');
logger.error('Something went wrong');

此配置实现了日志分级存储:错误及以上级别的日志单独写入 error.log,所有级别的日志同时写入 combined.log。在非生产环境(如开发或测试环境)下,日志还会以简化格式输出到控制台,便于实时调试。通过环境变量 LOG_LEVEL=debug node app.js 可动态调整日志输出级别。

使用 morgan 记录 Express 应用 HTTP 访问日志

对于基于 Express 的 Web 应用,记录 HTTP 访问日志是监控和审计的基础。morgan 中间件是完成此任务的理想工具。安装命令:npm install morgan

将其集成到 Express 应用中,并将日志流定向到文件:

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

const accessLogStream = fs.createWriteStream(
  path.join(__dirname, 'access.log'),
  { flags: 'a' }
);

const app = express();
app.use(morgan('combined', { stream: accessLogStream }));

app.get('/', (req, res) => res.send('Hello World'));
app.listen(3000, () => console.log('Server on 3000'));

最佳实践建议:在生产环境中,应将 HTTP 访问日志与业务逻辑日志分离存储。这有助于安全审计、流量分析和问题排查,使日志管理更加清晰。

使用 log4js 实现按类别与日期自动日志切割

当需要更精细的日志生命周期管理时,log4js 提供了强大的配置能力。安装:npm install log4js

以下配置示例展示了如何同时启用控制台输出、按文件大小轮转以及按日期轮转并压缩的日志策略:

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

log4js.configure({
  appenders: {
    console: { type: 'console' },
    file: {
      type: 'file',
      filename: path.join(__dirname, 'logs', 'app.log'),
      maxLogSize: 10 * 1024 * 1024, // 10MB
      backups: 5,
      encoding: 'utf-8'
    },
    dateFile: {
      type: 'dateFile',
      filename: path.join(__dirname, 'logs', 'app'),
      pattern: '.yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      compress: true
    }
  },
  categories: {
    default: { appenders: ['console', 'file', 'dateFile'], level: 'debug' }
  }
});

const logger = log4js.getLogger();
logger.info('Hello log4js');
logger.error('Oops');

此配置实现了三重保障:实时控制台查看、单个文件不超过 10MB 时自动切割备份(保留5个备份)、以及每日生成一个压缩的日期日志文件(如 app.2023-10-27.log.gz)。log4js 支持多种 appender 类型,可根据实际运维需求灵活组合。

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

配置好应用日志后,下一步是选择合适的运行和日志管理方式。以下是两种与 Ubuntu 系统深度集成的方案。

使用 PM2 进行进程守护与日志管理

PM2 不仅提供进程守护,其内置的日志管理功能也非常强大。全局安装:npm install -g pm2

启动应用:pm2 start app.js --name my-app

日志查看命令直观易用:

  • pm2 logs my-app:实时查看该应用的所有日志输出。
  • pm2 logs my-app --err:仅查看错误日志流。
  • pm2 logs my-app --out:仅查看标准输出日志流。

默认日志路径为 ~/.pm2/logs/。可以通过创建 ecosystem.config.js 配置文件进行高级定制,例如指定自定义日志路径:

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    out_file: 'logs/out.log',
    error_file: 'logs/err.log',
    combine_logs: false
  }]
};

使用 systemd 服务集成 journald 系统日志

对于追求标准化和与操作系统深度集成的生产部署,推荐使用 systemd。首先创建服务文件 /etc/systemd/system/myapp.service

[Unit]
Description=My Node.js App
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/app.js
Restart=always
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp

[Install]
WantedBy=multi-user.target

创建服务后,执行以下命令启用并启动:

  • sudo systemctl daemon-reload && sudo systemctl enable --now myapp

随后,即可使用 journalctl 命令高效查询和管理日志:

  • journalctl -u myapp -f:实时追踪(follow)该服务的日志。
  • journalctl -u myapp --since "2025-12-11 00:00:00":查看指定时间点之后的日志。

通过 systemd 集成,应用日志完全纳入 Ubuntu 系统日志体系,可利用其强大的查询、过滤和自动轮转机制。也可将输出设置为 syslog,配合 SyslogIdentifier 使用传统的 syslog 服务。

四 日志轮转与长期保留策略

为避免日志文件无限增长耗尽磁盘空间,在生产环境中实施日志轮转和保留策略至关重要。

使用 logrotate 实现系统级日志轮转(推荐)

logrotate 是 Ubuntu 等 Linux 发行版自带的日志轮转工具,稳定可靠。为应用创建配置文件,如 /etc/logrotate.d/myapp

/opt/myapp/logs/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 640 www-data www-data
    copytruncate
}

配置参数解析:

  • daily:按天执行轮转。
  • rotate 14:保留最近14个轮转后的日志文件。
  • compress:使用 gzip 压缩旧日志以节省存储空间。
  • copytruncate:此模式先复制当前日志文件,然后清空原文件,而非移动文件。这对于不支持接收信号以重新打开文件句柄的 Node.js 应用非常友好,可避免日志丢失。

配置完成后,可使用 sudo logrotate -d /etc/logrotate.d/myapp 进行干运行测试,确认无误后执行 sudo logrotate -f /etc/logrotate.d/myapp 立即触发轮转。

使用 winston-daily-rotate-file 实现应用内轮转

若希望轮转逻辑完全由应用控制,可使用 winston 的每日轮转文件传输插件。安装:npm install winston-daily-rotate-file

配置示例:

const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
  filename: 'logs/application-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
});

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    transport,
    new winston.transports.Console({ format: winston.format.simple() })
  ]
});

此配置实现了基于日期(每日)和文件大小(20MB)的双重轮转条件,自动压缩归档,并仅保留最近14天的日志文件。应用内轮转的优势在于策略灵活,不依赖外部系统工具。

五 生产环境日志最佳实践总结

为确保 Ubuntu 上 Node.js 应用的日志系统健壮、可维护,遵循以下最佳实践至关重要:

  • 规范日志级别:明确定义并使用 error、warn、info、debug 等标准级别。通过环境变量(如 LOG_LEVEL)动态控制输出级别,确保生产环境不会记录过多调试信息。
  • 推行结构化日志:统一输出为 JSON 格式。每条日志应包含时间戳、级别、服务名称、请求ID等固定字段,便于后续使用 ELK Stack、Graylog 等工具进行高效检索、聚合与分析。
  • 分离日志类型:将 HTTP 访问日志、业务逻辑日志、系统错误日志等区分开,存储在不同的文件或流中。这有助于快速定位问题,满足不同的审计和分析需求。
  • 规划目录与权限:建立统一的日志目录结构(例如 /var/log/myapp/),并确保运行应用的系统用户(如 www-data)对该目录拥有正确的写入权限。
  • 制定保留与归档策略:根据磁盘容量和合规性要求,明确日志文件的保留周期(如30天或90天)以及压缩归档策略,这是预防磁盘空间告警的基本措施。
  • 规划集中式日志:在微服务或分布式架构下,应考虑将各服务器节点的日志集中收集到 ELK Stack(Elasticsearch, Logstash, Kibana)或 Graylog 等平台。这能实现统一的日志搜索、可视化监控和实时告警,极大提升运维效率。
来源:https://www.yisu.com/ask/22038450.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

如何在Ubuntu中优化Node.js日志记录
编程语言
如何在Ubuntu中优化Node.js日志记录

在Ubuntu服务器上部署Node js应用,日志管理往往是决定后期维护效率的关键。一套清晰的日志策略,能让你在排查问题时事半功倍。今天,我们就来聊聊如何系统地优化Node js的日志记录。 1 使用日志库 第一步,也是最重要的一步,是告别原始的console log。成熟的日志库,比如winst

热心网友
05.02
如何在Ubuntu中设置Node.js日志
编程语言
如何在Ubuntu中设置Node.js日志

Ubuntu 服务器 Node js 日志配置与管理最佳实践指南 一 日志方案选型与对比 在 Ubuntu 环境中部署 Node js 应用时,选择合适的日志记录方案是确保系统可观测性的关键第一步。开发者通常可以从以下几个层面进行选择: 最基础的方法是直接使用 Node js 内置的 console

热心网友
05.02
Node.js在Ubuntu中的日志输出方式
编程语言
Node.js在Ubuntu中的日志输出方式

Node js 在 Ubuntu 的日志输出方式 一 内置方式与简单场景 最直接的方法是使用 console log 或 console error。这种方式简单直接,输出内容会发送到标准输出(stdout)或标准错误(stderr),非常适合在开发调试阶段快速查看信息。 然而,当您将 Node j

热心网友
05.02
Node.js在Ubuntu中日志文件在哪
编程语言
Node.js在Ubuntu中日志文件在哪

Node js 在 Ubuntu 系统中的日志文件存放位置详解 当您在 Ubuntu 服务器上运行 Node js 应用遇到问题时,定位日志文件是排查故障的第一步。然而,Ubuntu 系统本身并未为 Node js 应用预设一个统一的日志存放位置,具体路径完全取决于您的部署架构和配置方式。本文将为您

热心网友
05.02
如何编写有效的Ubuntu JS日志策略
编程语言
如何编写有效的Ubuntu JS日志策略

编写有效的Ubuntu JS日志策略 在Ubuntu环境下为Ja vaScript应用构建一套清晰的日志策略,绝非简单的代码输出。它更像是为你的应用搭建一套全天候的“健康监测系统”。一套设计得当的日志策略,能让你在问题发生时快速定位,甚至在用户感知之前就发现潜在风险。那么,如何搭建这套系统呢? 1

热心网友
05.02

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

最新元宵节赞美句子(收藏77句)
礼仪与书信
最新元宵节赞美句子(收藏77句)

一场外观绝美、内涵深刻的文化盛宴 灯火璀璨,人声鼎沸,这不仅仅是一个节日,更是一场值得亲身体验的文化盛宴。下面,就让我们一同走进那些精心整理的赞美之词,感受其中的欢愉与深意。 视觉与氛围的华章 当夜幕降临,眼前的景象便如梦似幻。彩色花灯层层叠叠,大小不一,形态各异,点点璀璨仿佛星河坠落人间,灼灼生辉

热心网友
05.02
最火的元宵节句子精选
礼仪与书信
最火的元宵节句子精选

本站专题“元宵节句子”为你推荐以下内容 年年岁岁,今又元宵。佳节将至,我们特意从浩瀚诗海中撷取了15首经典元宵诗词。愿这些穿越时空的文字,能为你捎去圆圆满满的梦、绵长深厚的爱、舒畅愉悦的心情,以及接下来每一个团圆美满的日子和滚滚而来的好运。 如果说思念有声音,那便是为你吟唱的歌,字字句句皆是珍重;倘

热心网友
05.02
元宵节说说(优选67句)
礼仪与书信
元宵节说说(优选67句)

醇香白酒,温暖心灵;团圆时光,倍感幸福。元宵节,美好时刻凝聚家人的情感。 说到元宵节,总绕不开那些温暖人心的祝福与感慨。我们精心整理了一份“元宵节说说”合集,希望能为你的佳节增添几分文采与情意。 元宵节说说(1--22条) 1、元宵节一过,大家的心思往往就转到了健康上,开始琢磨饮食,积极规划起新一年

热心网友
05.02
CoinRoutes、Uniswap API 与机构级 DeFi:一个新时代
web3.0
CoinRoutes、Uniswap API 与机构级 DeFi:一个新时代

CoinRoutes接入Uniswap API,为机构投资者打通了一条通往DeFi的便捷路径。这看似简单的技术对接,或许正在悄然重塑整个链上交易的生态格局。 CoinRoutes、Uniswap API 与机构级 DeFi:全新开端 CoinRoutes与Uniswap API的整合,堪称一次里程碑

热心网友
05.02
元宵节的烟花文案
礼仪与书信
元宵节的烟花文案

元宵节的烟花,向来是节日里最动人的风景。它升腾绽放的瞬间,不仅点亮了夜空,更映照出我们对生活的热爱与珍视。这份璀璨的美好,值得与身边人共同分享。为此,我们精心整理了一系列元宵节烟花文案,希望能为你的佳节增添一抹诗意与温情。欢迎阅读、收藏,并传递给那些你所在乎的人。 元宵节的烟花文案(1--18条)

热心网友
05.02