压缩 JS 日志文件通常可以从文件格式、压缩工具、前端/服务端处理几个层面来做。下面按常见场景给你一套实用方案。
gzip app.log
# 生成 app.log.gz
解压:
gunzip app.log.gz
zip logs.zip app.log
✅ 适合:已经生成的 .log / .js 日志文件
如果是前端采集日志并上传,建议在发送前压缩:
pako(gzip 的 JS 实现)npm install pako
import pako from 'pako';
const logStr = JSON.stringify(logs);
const compressed = pako.gzip(logStr);
// 上传 compressed(Blob / ArrayBuffer)
服务端用 gzip 解压即可。
如果日志太大,可以从源头减少体积:
❌ 不推荐:
[2024-01-01 10:00:00] ERROR user=123 msg=xxx
✅ 推荐:
{"t":1704074400,"l":"E","u":123,"m":"xxx"}
level → lmessage → mtimestamp → tgzip on;
gzip_types application/json;
const zlib = require('zlib');
const fs = require('fs');
const stream = fs.createWriteStream('app.log.gz');
const gzip = zlib.createGzip();
gzip.pipe(stream);
gzip.write(logData);
gzip.end();
使用 logrotate:
/var/log/app/*.log {
daily
rotate 7
compress
delaycompress
missingok
}
| 场景 | 推荐方式 |
|---|---|
| 已生成日志 | gzip / zip |
| 前端上传日志 | pako |
| 服务端写日志 | zlib + 流式 |
| 生产系统 | logrotate + gzip |
如果你能说明:
我可以给你更精确的方案(包括示例代码)。