温馨提示×

怎样过滤debian nodejs的日志

小樊
45
2026-09-10 04:59:10
栏目: 编程语言

在 Debian 上过滤 Node.js 日志,取决于日志写在哪里用什么方式运行 Node.js。下面按常见场景给你一套实用做法。


一、先看日志在哪里

1. 控制台直接运行

node app.js

日志在终端,可直接用管道过滤:

node app.js | grep ERROR
node app.js | grep -i warn

2. 使用 systemd(最常见)

如果你用:

systemctl start yourapp

日志由 journald 管理。

查看全部日志

journalctl -u yourapp

过滤关键字

journalctl -u yourapp | grep ERROR

实时过滤

journalctl -u yourapp -f | grep ERROR

按时间

journalctl -u yourapp --since "2024-01-01" --until "2024-01-02"

只看错误级别(Node 自身报错)

journalctl -u yourapp -p err

3. 日志写入文件

例如:

node app.js >> /var/log/node/app.log 2>&1

基本过滤

grep ERROR /var/log/node/app.log

实时过滤

tail -f /var/log/node/app.log | grep ERROR

多关键字

grep -E "ERROR|WARN" /var/log/node/app.log

排除某些内容

grep -v "healthcheck" /var/log/node/app.log

二、Node.js 应用层过滤(推荐)

1. 使用日志库(最规范)

winston / pino

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

这样:

  • error.log 只有错误
  • combined.log 全量

2. 环境变量控制日志级别

很多框架支持:

LOG_LEVEL=error node app.js

三、高级用法(运维向)

1. 用 jq 过滤 JSON 日志

如果日志是 JSON:

cat app.log | jq 'select(.level=="error")'

2. logrotate(避免日志爆炸)

/etc/logrotate.d/node-app

示例:

/var/log/node/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
}

四、快速选择方案

场景 推荐方式
调试中 node app.js | grep
systemd 服务 journalctl -u
生产环境 文件 + winston/pino
实时排查 tail -f | grep

如果你愿意,可以告诉我:

  • 你是 systemd / pm2 / docker / 裸跑
  • 日志是 文本 / JSON
  • 想过滤 ERROR / 某个接口 / 某个用户

我可以给你精确命令或配置

0