Debian JS日志如何配置
导读:Debian 上配置 JS 日志的实用方案 一 选择日志库与输出目标 常用库与场景 Winston:功能全面,支持多传输(文件、控制台、HTTP 等)、多格式,适合中大型项目。 Pino:高性能,生产环境友好,配合 pino-prett...
Debian 上配置 JS 日志的实用方案
一 选择日志库与输出目标
- 常用库与场景
- Winston:功能全面,支持多传输(文件、控制台、HTTP 等)、多格式,适合中大型项目。
- Pino:高性能,生产环境友好,配合 pino-pretty 可在开发环境获得可读输出。
- Morgan:Express 的 HTTP 请求日志中间件,专注记录访问日志。
- Log4js:配置化能力强,支持按类别输出与滚动。
- 快速示例
- Winston(按级别分流到文件与控制台)
- 安装:
npm install winston - 配置:
- const winston = require(‘winston’);
- const logger = winston.createLogger({ level: ‘info’, format: winston.format.json(), transports: [ new winston.transports.File({ filename: ‘error.log’, level: ‘error’ } ), new winston.transports.File({ filename: ‘combined.log’ } ), new winston.transports.Console({ format: winston.format.simple() } ) ] } );
- 安装:
- Pino(开发期彩色可读,生产期 JSON)
- 安装:
npm install pino pino-pretty - 配置:
- const pino = require(‘pino’);
- const logger = pino({ level: ‘info’, transport: process.env.NODE_ENV !== ‘production’ ? { target: ‘pino-pretty’, options: { colorize: true } } : undefined } );
- 安装:
- Morgan(记录 HTTP 请求)
- 安装:
npm install morgan - 配置(Express):
- const morgan = require(‘morgan’);
- app.use(morgan(‘combined’)); // 或 ‘dev’/‘tiny’ 等预设
- 安装:
- Winston(按级别分流到文件与控制台)
二 日志级别与动态控制
- 级别设置
- 常见级别(由低到高):error < warn < info < debug。设置 logger 的 level 后,只有大于等于该级别的日志会被输出。
- 运行时通过环境变量控制
- 代码示例:
- const logLevel = process.env.LOG_LEVEL || ‘info’;
- const logger = winston.createLogger({ level: logLevel, … } );
- 启动命令:
- LOG_LEVEL=debug node app.js
- 代码示例:
- 环境区分
- 生产环境建议输出 JSON 到文件,开发环境输出 可读格式 到控制台,便于排查。
- if (process.env.NODE_ENV !== ‘production’) { logger.add(new winston.transports.Console({ format: winston.format.simple() } )); }
- 生产环境建议输出 JSON 到文件,开发环境输出 可读格式 到控制台,便于排查。
三 日志轮转与保留策略
- 应用内轮转(推荐与文件输出配合)
- Winston + winston-daily-rotate-file:
- 安装:
npm install winston-daily-rotate-file - 配置:
- const DailyRotateFile = require(‘winston-daily-rotate-file’);
- new DailyRotateFile({ filename: ‘application-%DATE%.log’, datePattern: ‘YYYY-MM-DD-HH’, zippedArchive: true, maxSize: ‘20m’, maxFiles: ‘14d’ } )
- 安装:
- Winston + winston-daily-rotate-file:
- 系统级轮转(对 Node 写出的 *.log 文件统一处理)
- 使用 logrotate(Debian 自带)
- 新建配置:
sudo nano /etc/logrotate.d/nodejs - 示例:
- /path/to/your/nodejs/logs/*.log { daily rotate 7 compress missingok notifempty create 0644 root root }
- 校验与强制执行:
- sudo logrotate -d /etc/logrotate.d/nodejs
- sudo logrotate -f /etc/logrotate.d/nodejs
- 新建配置:
- 使用 logrotate(Debian 自带)
- 何时用哪种
- 单进程/单实例:应用内轮转更直观。
- 多实例/多文件/容器:系统级 logrotate 更易统一运维。
四 运行与运维实践
- 使用 PM2 管理进程与日志
- 安装:
sudo npm install -g pm2 - 启动:
pm2 start app.js --name "my-app" - 分别记录错误与标准输出:
- 命令行:
pm2 start app.js --name "my-app" --error err.log --output out.log - 或在 ecosystem.config.js:
- module.exports = { apps: [{ name: ‘my-app’, script: ‘app.js’, error_file: ‘err.log’, out_file: ‘out.log’ } ] }
- 命令行:
- 查看日志:
pm2 logs my-app
- 安装:
- 命令行查看与检索
- 实时查看:
tail -f app.log - 关键字检索:
cat app.log | grep "error"
- 实时查看:
- 反向代理日志(如 Nginx)
- 自定义访问日志格式并写入 /var/log/nginx/access.log,便于与后端日志关联分析。
五 集中式日志与可视化
- 将日志发送到 ELK Stack(Elasticsearch, Logstash, Kibana) 或其他集中式系统,便于检索、分析与告警。
- 结合 Prometheus + Grafana 做指标可视化与阈值告警,形成可观测性闭环。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian JS日志如何配置
本文地址: https://pptw.com/jishu/766412.html
