压缩 JS 日志文件通常可以从文件体积优化和传输/存储压缩两个层面来做。下面按常见场景给你讲清楚。
debug / verbose 日志const level = 'production' ? 'error' : 'debug';
比纯文本更易压缩:
{"t":1710000000,"l":"error","m":"fail","u":123}
而不是:
2024-03-10 10:00:00 ERROR user 123 fail
{"t":...,"l":...,"m":...}
比:
{"time":...,"level":...,"message":...}
体积更小,压缩率更高。
如果是服务器日志文件:
gzip app.log
# 生成 app.log.gz
解压:
gunzip app.log.gz
适合现代系统:
brotli app.log
# 生成 app.log.br
zip logs.zip app.log
如果你是前端收集日志并上传:
async function compress(str) {
const stream = new Blob([str])
.stream()
.pipeThrough(new CompressionStream('gzip'));
const blob = await new Response(stream).blob();
return blob;
}
import pako from 'pako';
const compressed = pako.gzip(logString);
后端用 zlib.gunzip 解压。
Linux 常用 logrotate:
/var/log/app/*.log {
daily
rotate 7
compress
missingok
notifempty
}
会自动:
| 场景 | 推荐方式 |
|---|---|
| 服务器日志存储 | gzip + logrotate |
| 前端日志上传 | pako / CompressionStream |
| 云存储归档 | brotli |
| 临时传输 | zip |
如果你能说清楚:
我可以给你更精确的方案或代码。