发布于2026-07-16 阅读(0)
扫一扫,手机访问
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动', { port: 3000 });
logger.error('数据库连接失败', { err: err.message });
另外,日志轮转这件事一定要上,不然日志文件越滚越大,最终拖慢整个分析过程。可以用 winston-daily-rotate-file 或者系统层面的 logrotate 来搞定。
进程与系统日志:如果你用 PM2 管理进程,那 pm2 logs 命令可以帮你聚合多实例的日志。如果用 systemd 管理服务,journalctl -u your-app.service 可以直接看到服务的所有输出和启动参数。Ubuntu 默认的 systemd journal 本身就支持按时间窗、服务名、日志级别过滤,非常方便。传统的文本日志一般放在 /var/log/ 下,比如 syslog、auth.log、kern.log。
awk -F'"responseTimeMs":' '{gsub(/[^0-9.]/,"",$2); t[substr($1,2,16)]+=$2; n[substr($1,2,16)]++} END{for(k in t) printf "%s %.2f %.0f\n", k, t[k]/n[k], t[k]/n[k]*1.96}' combined.log | sort
Top 5 慢接口:
jq -r 'select(.route and .responseTimeMs) | [.route, .method, .responseTimeMs] | @tsv' combined.log | sort -k3 -nr | head -5
错误率趋势(按小时):
awk -F'"statusCode":' '{s[$1]+=1; e[$1]+=($2~/^5/)} END{for(k in s) printf "%s %.2f%%\n", k, e[k]/s[k]*100}' combined.log | sort
至于可视化和告警层面,小规模场景可以直接导出 CSV/JSON 到 Grafana,配合 Loki 或 Prometheus 来做趋势图和阈值告警。到了中大规模,ELK(Elasticsearch + Logstash + Kibana)这套组合拳基本就成了标准配置,检索、聚合、可视化一步到位。
上一篇:怎样从dmesg中发现潜在风险
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8