CentOS上Node.js日志如何查看与管理
导读:CentOS 上 Node.js 日志查看与管理 一 查看方式与常用命令 使用 journalctl 查看 systemd 服务日志(适用于以服务方式运行的应用): 实时查看:journalctl -u your-nodejs-serv...
CentOS 上 Node.js 日志查看与管理
一 查看方式与常用命令
- 使用 journalctl 查看 systemd 服务日志(适用于以服务方式运行的应用):
- 实时查看:
journalctl -u your-nodejs-service.service -f - 按时间过滤:
journalctl -u your-nodejs-service.service --since "2025-12-07 00:00:00" -u your-nodejs-service.service --until "2025-12-07 12:00:00" - 查看内核与系统消息:
journalctl -k;查看安全相关:journalctl -u sshd
- 实时查看:
- 直接查看应用日志文件(适用于输出到文件的场景):
- 实时跟踪:
tail -f logs/app.log - 分页查看:
less logs/app.log - 关键字检索:
grep -i "error" logs/app.log | tail -n 50
- 实时跟踪:
- 使用 PM2 内置日志(适用于 PM2 管理的应用):
- 实时查看:
pm2 logs my-nodejs-app - 查看错误日志:
pm2 logs my-nodejs-app --err - 查看某文件最近 200 行:
pm2 logs my-nodejs-app --nostream --lines 200
- 实时查看:
- 系统日志目录与用途(便于交叉排查):
- /var/log/messages(系统与服务常规消息)、/var/log/secure(认证与安全)、/var/log/audit/audit.log(审计事件)。
二 应用内日志配置与最佳实践
- 选择日志库与结构化输出:
- Winston(生态丰富、多传输)、Pino(高性能、低开销)、Bunyan(结构化 JSON)、Log4js(灵活布局与 Appender)。
- 建议生产环境使用 JSON 格式,便于检索与聚合分析。
- 设置合理日志级别:
- 常见级别:fatal / error / warn / info / debug / trace;生产常用 info / warn / error,调试阶段开启 debug。
- 示例(Winston,区分错误与合并日志,控制台与文件双输出):
- 安装:
npm i winston - 配置:
- const winston = require(‘winston’);
const {
combine, timestamp, printf, errors }
= winston.format;
const logger = winston.createLogger({
level: ‘info’,
format: combine(
timestamp({
format: ‘YYYY-MM-DD HH:mm:ss’ }
),
errors({
stack: true }
),
printf(({
level, message, timestamp, stack }
) =>
stack ?
[${ timestamp} ] ${ level.toUpperCase()} : ${ message} \n${ stack}:[${ timestamp} ] ${ level.toUpperCase()} : ${ message}) ), transports: [ new winston.transports.File({ filename: ‘logs/error.log’, level: ‘error’ } ), new winston.transports.File({ filename: ‘logs/combined.log’ } ), new winston.transports.Console({ format: winston.format.colorize() } ) ], exitOnError: false } ); module.exports = logger;
- const winston = require(‘winston’);
const {
combine, timestamp, printf, errors }
= winston.format;
const logger = winston.createLogger({
level: ‘info’,
format: combine(
timestamp({
format: ‘YYYY-MM-DD HH:mm:ss’ }
),
errors({
stack: true }
),
printf(({
level, message, timestamp, stack }
) =>
stack ?
- 安装:
- HTTP 请求日志(Express + morgan):
- 安装:
npm i morgan winston - 使用:
- const morgan = require(‘morgan’); const logger = require(‘./logger’); const stream = { write: msg => logger.info(msg.trim()) } ; app.use(morgan(‘combined’, { stream } ));
- 安装:
- 目录与权限:
- 建议日志落盘到 /var/log/your-app/,并设定属主为运行用户(如 nodejs:nodejs):
- sudo mkdir -p /var/log/your-app
- sudo touch /var/log/your-app/error.log /var/log/your-app/combined.log
- sudo chown -R nodejs:nodejs /var/log/your-app。
- 建议日志落盘到 /var/log/your-app/,并设定属主为运行用户(如 nodejs:nodejs):
三 日志轮转与保留策略
- 使用 logrotate(系统级,适用于直接写文件的场景):
- 新建配置:
sudo vim /etc/logrotate.d/nodejs-app - 示例策略(按天轮转、保留 7 天、压缩、空文件不轮转、轮转后截断原文件、文件名加日期):
- /var/log/your-app/*.log { daily rotate 7 compress missingok notifempty copytruncate dateext }
- 测试与强制执行:
sudo logrotate -f /etc/logrotate.d/nodejs-app
- 新建配置:
- 使用 PM2 Logrotate 插件(适用于 PM2 管理):
- 安装:
pm2 install pm2-logrotate - 常用策略:
- pm2 set pm2-logrotate:max_size 10M
- pm2 set pm2-logrotate:retain 7
- pm2 set pm2-logrotate:compress true
- pm2 set pm2-logrotate:rotateInterval “0 0 * * *”
- 重启生效:
pm2 restart all
- 安装:
- 使用 winston-daily-rotate-file(应用内按天切分):
- 安装:
npm i winston-daily-rotate-file - 示例:
- const DailyRotateFile = require(‘winston-daily-rotate-file’); const transport = new DailyRotateFile({ filename: ‘logs/myapp-%DATE%.log’, datePattern: ‘YYYY-MM-DD’, zippedArchive: true, maxFiles: ‘14d’ } ); logger.add(transport);
- 安装:
- 选择建议:已用 PM2 优先用其插件;直接写文件的服务优先用 logrotate;需要按天归档与保留策略时可在应用内使用 daily-rotate-file。
四 集中式日志与远程传输
- 使用 rsyslog 发送到远程日志服务器(UDP 示例):
- 安装:
sudo yum install -y rsyslog - 启用 UDP 模块(取消注释或添加):
- module(load=“imudp”)
- input(type=“imudp” port=“514”)
- 转发规则(在 /etc/rsyslog.conf 或 /etc/rsyslog.d/ 下新增):
*.* @remote_server_ip:514 - 重启:
sudo systemctl restart rsyslog
- 安装:
- 应用内发送到 Syslog(Winston + winston-syslog):
- 安装:
npm i winston winston-syslog - 配置:
- const winston = require(‘winston’); const SyslogTransport = require(‘winston-syslog’).SyslogTransport; const logger = winston.createLogger({ transports: [ new SyslogTransport({ host: ‘remote_server_ip’, port: 514, protocol: ‘udp4’ } ) ] } );
- 安装:
- 集中式分析与可视化:
- 使用 ELK Stack(Elasticsearch + Logstash + Kibana) 或 Graylog 做日志收集、索引、检索与仪表盘展示,便于 7×24 监控与告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS上Node.js日志如何查看与管理
本文地址: https://pptw.com/jishu/765981.html
