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)
|
b64Writer := base64.NewEncoder(base64.StdEncoding, &buf)
|
||||||
|
|
||||||
// 使用 Pool 优化压缩
|
// 使用 Pool 优化压缩
|
||||||
zw := utils.GetZlibWriter(b64Writer)
|
zw := utils.GetZstdWriter(b64Writer)
|
||||||
defer utils.PutZlibWriter(zw)
|
defer utils.PutZstdWriter(zw)
|
||||||
|
|
||||||
// 获取文件大小
|
// 获取文件大小
|
||||||
stat, err := f.Stat()
|
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 {
|
if _, err := io.Copy(zw, f); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -308,7 +308,7 @@ func (l *TinyLog) CompressAndCleanup() (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return buf.String(), nil
|
return "zstd:" + buf.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadLastLines 返回日志的最后 n 行
|
// ReadLastLines 返回日志的最后 n 行
|
||||||
|
|||||||
@@ -31,6 +31,25 @@ func PutZlibWriter(zw *zlib.Writer) {
|
|||||||
zlibWriterPool.Put(zw)
|
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 (
|
var (
|
||||||
zstdEncoder *zstd.Encoder
|
zstdEncoder *zstd.Encoder
|
||||||
zstdDecoder *zstd.Decoder
|
zstdDecoder *zstd.Decoder
|
||||||
|
|||||||
Reference in New Issue
Block a user