如何利用日志进行 Debian JS 调试
导读:Debian 环境下用日志高效调试 JavaScript 的实用流程 一 定位与查看日志来源 系统与服务日志:Debian 的系统日志集中在 /var/log/。常见文件包括 /var/log/syslog、Web 服务器的 /var/...
Debian 环境下用日志高效调试 JavaScript 的实用流程
一 定位与查看日志来源
- 系统与服务日志:Debian 的系统日志集中在 /var/log/。常见文件包括 /var/log/syslog、Web 服务器的 /var/log/apache2/error.log 或 /var/log/nginx/error.log。实时查看可用命令:tail -f /var/log/syslog。
- Node.js 应用日志:应用常写入自定义文件(如 app.log、error.log、combined.log),或用日志库输出到多目标(控制台、文件、远程)。
- systemd 服务日志:若用 systemd 托管 Node.js,设置 StandardOutput=syslog、StandardError=syslog、SyslogIdentifier=my-js-app 后,可用 journalctl -u my-js-app -f 实时查看。
- 前端浏览器日志:打开 Chrome DevTools → Console 查看运行时错误;在 Network 观察请求失败与响应时长。
二 配置高质量日志输出
- 使用日志库:生产环境建议使用 winston 或 pino,支持多级别、多传输、结构化输出。示例(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() ] } );
- 环境变量控制级别:
- const logLevel = process.env.LOG_LEVEL || ‘info’;
- 在 development 用 debug,在 production 用 info/warn。
- 访问日志(后端 API):Express 搭配 morgan 记录请求:
- const morgan = require(‘morgan’); app.use(morgan(‘combined’));
- 日志轮转:防止日志过大,使用 winston-daily-rotate-file 或 pino-rotate。示例(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’ } );
三 监控与问题定位工作流
- 实时跟踪:
- 应用日志:tail -f app.log 或 tail -f error.log;
- systemd 服务:journalctl -u my-js-app -f -n 100;
- 系统日志:tail -f /var/log/syslog。
- 关键字检索:在日志中搜索 ERROR、Exception、Failed 等,并结合时间戳还原上下文。
- 访问链路排查:后端看 combined.log(配合 morgan),Web 层看 /var/log/nginx/error.log 或 /var/log/apache2/error.log,前端看 DevTools Console/Network。
- 异常兜底:在 Node.js 中监听全局未处理异常与 Promise 拒绝,确保关键错误被记录:
- process.on(‘unhandledRejection’, (reason, promise) => { console.error(‘Unhandled Rejection:’, promise, ‘reason:’, reason); } );
- 深度调试:当日志信息不足时,使用 node --inspect-brk app.js,在 chrome://inspect 进行断点调试;或在 VS Code 配置 .vscode/launch.json 进行交互式调试。
四 高效检索与分析技巧
- 命令行过滤:
- 按级别:grep “ERROR” combined.log;
- 按时间:grep “2025-12-10” app.log;
- 多条件:grep “ERROR” combined.log | grep “/api/user”。
- 结构化分析:使用 JSON 格式 输出(winston/pino),便于后续用 jq 或日志平台做聚合与检索。
- 集中式日志:将日志发送到 ELK Stack(Elasticsearch、Logstash、Kibana)、Graylog 或 Splunk,便于海量日志的检索、可视化与告警。
五 最小化可用配置示例
- Express + 日志 + systemd(可直接复用)
- 安装依赖:npm install express morgan winston winston-daily-rotate-file
- 日志配置(logger.js):
- const winston = require(‘winston’);
- const DailyRotateFile = require(‘winston-daily-rotate-file’);
- const transport = new DailyRotateFile({ filename: ‘application-%DATE%.log’, datePattern: ‘YYYY-MM-DD’, zippedArchive: true, maxSize: ‘20m’, maxFiles: ‘14d’ } );
- const logger = winston.createLogger({ level: process.env.LOG_LEVEL || ‘info’, format: winston.format.json(), transports: [ transport, new winston.transports.Console() ] } );
- module.exports = logger;
- 应用代码(app.js):
- const express = require(‘express’); const morgan = require(‘morgan’); const logger = require(‘./logger’);
- const app = express(); app.use(morgan(‘combined’));
- app.get(‘/error’, () => { throw new Error(‘boom’); } );
- app.use((err, req, res, next) => { logger.error({ err: err.stack, url: req.url, method: req.method } , ‘request error’); res.status(500).send(‘error’); } );
- app.listen(3000, () => logger.info(‘Server listening on 3000’));
- systemd 服务(/etc/systemd/system/my-js-app.service):
- [Unit] Description=My JS App
- [Service] ExecStart=/usr/bin/node /opt/myapp/app.js Restart=always User=www-data Environment=NODE_ENV=production LOG_LEVEL=debug StandardOutput=syslog StandardError=syslog SyslogIdentifier=my-js-app
- [Install] WantedBy=multi-user.target
- 使用:
- 启动:sudo systemctl daemon-reload & & sudo systemctl start my-js-app
- 查看:sudo journalctl -u my-js-app -f
- 轮转与归档将按日切分并保留 14 天。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何利用日志进行 Debian JS 调试
本文地址: https://pptw.com/jishu/768715.html
