Ubuntu下Node.js错误日志监控方法
Ubuntu中监控Node js错误日志可通过直接查看日志文件、使用PM2进程管理器、借助systemd的journalctl、采用Winston或Bunyan等第三方日志库以及配置logrotate日志轮替实现。不同方法侧重各异,日常调试可用tail-f,生产环境推荐PM2结合日志库及logrotate。
在Ubuntu系统中追踪Node.js应用的错误日志,有多种成熟的方法可供选择。无论是直接查阅日志文件、利用进程管理器辅助、集成系统日志,还是借助第三方工具,都能有效实现。以下详细介绍几种常用方案。

1. 直接查看应用程序日志文件
如果你的Node.js应用将错误日志写入文件(例如通过console.error()重定向或使用第三方日志库),实时监控非常简单:
tail -f命令:这是最直接的方式,能够实时显示日志文件中新增的内容。例如,若错误日志位于/var/log/myapp-error.log,执行tail -f /var/log/myapp-error.log即可持续刷新最新的错误信息。multitail工具:如果需要同时监控多个文件,multitail支持多文件同时监控、颜色高亮和分屏显示。安装命令:sudo apt-get install multitail,然后运行multitail /var/log/myapp-error.log即可开始使用。
2. 使用PM2进程管理器统一管理
PM2作为Node.js生态中常用的进程管理工具,自带日志捕获、实时查看、日志轮转、重启等功能,操作十分便捷:
- 安装:全局安装命令为
sudo npm install pm2 -g。 - 启动应用并指定错误日志路径:例如
pm2 start app.js --name my-app --error logs/my-app-error.log;若不指定,PM2默认将错误日志存储到~/.pm2/logs/。-error.log - 实时查看日志:执行
pm2 logs my-app即可看到应用输出的实时错误信息。如需过滤,可结合grep:pm2 logs my-app | grep 'ERROR'。
3. 利用系统日志(journalctl)进行整合
如果Node.js应用以系统服务方式运行(例如通过systemd管理),使用journalctl可以直接查看系统日志中的错误信息:
- 首先创建一个systemd服务文件,例如
/etc/systemd/system/my-nodejs-app.service,内容大致如下:[Unit] Description=My Node.js App After=network.target [Service] ExecStart=/usr/bin/node /path/to/app.js Restart=always User=Group= StandardOutput=syslog StandardError=syslog SyslogIdentifier=my-nodejs-app [Install] WantedBy=multi-user.target - 然后通过
journalctl -u my-nodejs-app -t查看该服务的所有日志(包含错误),其中-u指定服务名,-t显示日志标签。
4. 借助第三方日志库实现精细记录
采用Winston、Bunyan等日志库,可以自定义日志格式、级别和存储路径,为后续分析提供便利:
- Winston示例:安装
npm install winston,配置一个仅记录error级别日志并输出到文件的logger:const winston = require('winston'); const logger = winston.createLogger({ level: 'error', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'logs/error.log' }), new winston.transports.Console() // 可选,同时输出到控制台 ] }); // 捕获错误时记录 try { // 业务代码 } catch (error) { logger.error('An error occurred:', error); } - Bunyan示例:安装
npm install bunyan,配置一个输出JSON格式错误日志的logger:const bunyan = require('bunyan'); const logger = bunyan.createLogger({ name: 'my-app', streams: [ { level: 'error', path: 'logs/app-error.log' } ] }); logger.error('Database connection failed:', { error: err.message });
使用这些库记录的错误日志结构清晰,后续接入ELK Stack或Graylog等分析工具非常方便。
5. 日志轮转,防止磁盘空间耗尽
若不对错误日志加以控制,数月后可能占用大量磁盘空间。Linux自带的logrotate工具可以轻松解决这个问题:
- 在
/etc/logrotate.d/目录下新建一个配置文件(例如nodejs),内容示例如下:/path/to/your/nodejs/app/logs/*.log { daily # 每天轮转一次 missingok # 日志文件不存在时不报错 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志 notifempty # 空文件不进行轮转 create 0640# 创建新日志文件并设置权限(替换为实际用户和组) } - 手动触发轮转:
sudo logrotate -f /etc/logrotate.d/nodejs。
以上几种方法各有适用场景:日常调试时使用tail -f即可满足需求;生产环境推荐PM2搭配日志库与logrotate的组合方案,能够覆盖常见监控需求。根据实际场景选择合适的方式,避免错误日志成为运维盲区。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Go语言AES混淆加密解密敏感数据详解
Go语言AES加密需注意:密钥长度必须为16、24或32字节,否则会引发panic;CBC模式解密乱码常因IV或PKCS7填充错误;GCM模式中nonce不可重用,否则密钥可被恢复;ECB模式因明文块输出固定密文,存在安全风险,不建议使用。
C++ std::atomic::wait高性能轮询等待原子变量状态变化
C++20的std::atomic::wait是轻量级等待机制,需GCC11+ Clang12+及glibc≥2 34,macOS不支持。需与notify配对,注意内存序,循环检查防虚假唤醒。超时版本精度有限,高性能关键在notify时机与内存序正确性。
VSCode左侧边栏不见了?快速找回方法
按Ctrl+B或Cmd+B可恢复被误触隐藏的侧边栏。若无效,需检查窗口焦点是否在编辑器、是否处于全屏或Zen模式、workbench activityBar visible配置项、扩展冲突以及远程环境同步问题,并逐一排查。
VSCode中利用Node批量修改多媒体文件元数据标签
music-metadata库支持跨格式读写MP3、FLAC、M4A、WAV等音频元数据,需先用parseFile()初始化,再调用writeMetadata()写入。批量修改前必须验证写入支持,封面图片需为Uint8Array格式。在VSCode终端运行脚本比插件更可控,处理中文路径时需切换终端代码页为UTF-8并指定ID3v2 3版本以避免乱码。
用Composer引入PHP-Console-Highlighter在终端高亮代码段
php-console-highlighter已废弃且不兼容现代PHP,无法通过Composer安装。推荐使用clue rainbow库,执行composerrequire后调用静态方法高亮代码。若需原库,须手动下载并require_once,但存在兼容问题,不推荐生产环境。
- 热门数据榜
相关攻略
2026-07-13 06:53
2026-07-13 06:53
2026-07-13 06:53
2026-07-13 06:53
2026-07-13 06:53
2026-07-13 06:52
2026-07-13 06:52
2026-07-13 06:52
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

