阅读量:3
CentOS上Node.js日志配置与管理
一 核心方案与工具
- 在应用内使用成熟的日志库,推荐:Winston(多传输、易配置)、Pino(高性能、低开销)、Bunyan(结构化 JSON)、Log4js(灵活、内置按大小/时间滚动)。
- 在系统侧使用 logrotate 做按大小/时间的文件轮转与压缩,适合长期运行服务。
- 使用 PM2 进行进程管理与内置日志聚合查看,简化开发与运维。
- 做集中式日志时,可接入 rsyslog(UDP/TCP 514)、Logstash/Fluentd,并在 ELK(Elasticsearch、Logstash、Kibana) 中存储与可视化。
- 日志级别建议:开发环境用 debug,生产环境用 info/warn/error 分层输出,便于过滤与告警。
二 应用内日志配置示例
- 使用 Winston 输出到控制台与文件,并按错误/全量分离:
// logger.js
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.json()
),
transports: [
new transports.File({ filename: 'logs/error.log', level: 'error' }),
new transports.File({ filename: 'logs/combined.log' }),
new transports.Console()
]
});
module.exports = logger;
- 使用 winston-daily-rotate-file 做按天滚动与压缩归档:
// logger-daily.js
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
})
),
transports: [
new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
module.exports = logger;
- 使用 Log4js 按时间滚动(dateFile)示例:
// logger-log4js.js
const log4js = require('log4js');
log4js.configure({
appenders: {
out: { type: 'console' },
app: {
type: 'dateFile',
filename: 'logs/app',
pattern: '.yyyy-MM-dd.log',
compress: true,
alwaysIncludePattern: true
}
},
categories: {
default: { appenders: ['out', 'app'], level: 'info' }
}
});
const logger = log4js.getLogger();
module.exports = logger;
- 使用建议:生产环境优先输出 JSON 到文件,便于后续检索与聚合;控制台输出用于本地/调试。
三 系统级日志轮转与保留策略
- 使用 logrotate 管理 Node.js 应用日志文件(适合 systemd 或长期运行进程):
- 创建配置:/etc/logrotate.d/nodejs_app
/path/to/your/nodejs/app/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root
}
- 手动测试:sudo logrotate -f /etc/logrotate.d/nodejs_app
- 说明:CentOS 上 logrotate 默认由 cron.daily 每日触发,无需额外定时任务。
- 何时选择应用内轮转 vs 系统级轮转:
- 应用内(如 winston-daily-rotate-file)更细粒度、可按大小与日期双重控制,适合容器/多实例。
- 系统级(logrotate)与操作系统集成度高、运维统一,适合物理机/虚拟机上的长期服务。
四 进程管理与集中式日志
- 使用 PM2 管理进程与查看日志:
- 安装:npm install pm2 -g
- 启动:pm2 start app.js --name my-node-app
- 查看:pm2 logs my-node-app
- 日志轮转(PM2 内置插件):
- pm2 set pm2-logrotate:max_size 10M
- pm2 set pm2-logrotate:retain 7
- 发送到 rsyslog(UDP/TCP 514)并集中到远程日志服务器:
- 服务端启用 UDP 514:编辑 /etc/rsyslog.conf,取消注释并启动模块:
- module(load=“imudp”)
- input(type=“imudp” port=“514”)
- 重启服务:sudo systemctl restart rsyslog
- 客户端(Node.js + Winston Syslog):
- 服务端启用 UDP 514:编辑 /etc/rsyslog.conf,取消注释并启动模块:
const { createLogger, transports } = require('winston');
const SyslogTransport = require('winston-syslog').SyslogTransport;
const logger = createLogger({
level: 'info',
transports: [
new SyslogTransport({
host: '192.0.2.10', // 远程 rsyslog 地址
port: 514,
protocol: 'udp4'
})
]
});
- 集中式分析:将日志送入 Logstash → Elasticsearch → Kibana,实现检索、聚合与可视化。
五 日常运维与最佳实践
- 目录与权限:日志目录建议统一在 /var/log/yourapp/,权限 0755,日志文件 0640,属主为运行用户(如 nodejs 或 appuser)。
- 日志级别与环境:开发用 debug,生产用 info/warn/error;通过环境变量控制日志级别与输出目标。
- 结构化与采样:优先 JSON 输出,关键路径加 requestId/traceId,高并发场景对 debug/trace 做采样避免性能抖动。
- 性能与可靠性:尽量使用异步/缓冲写入;避免同步日志阻塞事件循环;关键错误同步落盘。
- 保留与合规:按业务与合规要求设置保留周期(如 7–90 天),定期清理与归档。
- 监控与告警:对 error 关键字、日志速率异常、磁盘使用率设置监控与告警。
以上就是关于“CentOS上Node.js日志如何配置与管理”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm