feat(tasks): refactor tiny_log streaming compression to use ZSTD with zstd: prefix
This commit is contained in:
@@ -265,8 +265,8 @@ func (l *TinyLog) CompressAndCleanup() (string, error) {
|
||||
b64Writer := base64.NewEncoder(base64.StdEncoding, &buf)
|
||||
|
||||
// 使用 Pool 优化压缩
|
||||
zw := utils.GetZlibWriter(b64Writer)
|
||||
defer utils.PutZlibWriter(zw)
|
||||
zw := utils.GetZstdWriter(b64Writer)
|
||||
defer utils.PutZstdWriter(zw)
|
||||
|
||||
// 获取文件大小
|
||||
stat, err := f.Stat()
|
||||
@@ -295,7 +295,7 @@ func (l *TinyLog) CompressAndCleanup() (string, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// 流处理: 文件 -> Zlib -> Base64 -> 缓冲区
|
||||
// 流处理: 文件 -> Zstd -> Base64 -> 缓冲区
|
||||
if _, err := io.Copy(zw, f); err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -308,7 +308,7 @@ func (l *TinyLog) CompressAndCleanup() (string, error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return buf.String(), nil
|
||||
return "zstd:" + buf.String(), nil
|
||||
}
|
||||
|
||||
// ReadLastLines 返回日志的最后 n 行
|
||||
|
||||
@@ -31,6 +31,25 @@ func PutZlibWriter(zw *zlib.Writer) {
|
||||
zlibWriterPool.Put(zw)
|
||||
}
|
||||
|
||||
var zstdEncoderPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
zw, _ := zstd.NewWriter(nil)
|
||||
return zw
|
||||
},
|
||||
}
|
||||
|
||||
// GetZstdWriter 从对象池中获取 zstd 写入器并定向到 w
|
||||
func GetZstdWriter(w io.Writer) *zstd.Encoder {
|
||||
zw := zstdEncoderPool.Get().(*zstd.Encoder)
|
||||
zw.Reset(w)
|
||||
return zw
|
||||
}
|
||||
|
||||
// PutZstdWriter 将 zstd 写入器还回对象池
|
||||
func PutZstdWriter(zw *zstd.Encoder) {
|
||||
zstdEncoderPool.Put(zw)
|
||||
}
|
||||
|
||||
var (
|
||||
zstdEncoder *zstd.Encoder
|
||||
zstdDecoder *zstd.Decoder
|
||||
|
||||
Reference in New Issue
Block a user