chore: add log size limit
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/engigu/baihu-panel/internal/logger"
|
||||
"github.com/engigu/baihu-panel/internal/models"
|
||||
"github.com/engigu/baihu-panel/internal/systime"
|
||||
"github.com/engigu/baihu-panel/internal/constant"
|
||||
"github.com/engigu/baihu-panel/internal/utils"
|
||||
)
|
||||
|
||||
@@ -161,8 +162,9 @@ func (s *TaskLogService) ProcessTaskCompletion(taskLog *models.TaskLog) error {
|
||||
|
||||
// CreateTaskLogFromAgentResult 从 Agent 结果创建任务日志
|
||||
func (s *TaskLogService) CreateTaskLogFromAgentResult(result *models.AgentTaskResult) (*models.TaskLog, error) {
|
||||
// 压缩输出
|
||||
compressed, err := utils.CompressToBase64(result.Output)
|
||||
// 裁剪并压缩输出
|
||||
trimmedOutput := utils.TrimLog(result.Output, constant.MaxLogSize)
|
||||
compressed, err := utils.CompressToBase64(trimmedOutput)
|
||||
if err != nil {
|
||||
logger.Errorf("[TaskLog] 压缩日志失败: %v", err)
|
||||
compressed = ""
|
||||
@@ -202,8 +204,9 @@ func (s *TaskLogService) CreateTaskLogFromLocalExecution(taskID string, command,
|
||||
if isCompressed {
|
||||
compressed = output
|
||||
} else {
|
||||
// 压缩输出
|
||||
compressed, err = utils.CompressToBase64(output)
|
||||
// 裁剪并压缩输出
|
||||
trimmedOutput := utils.TrimLog(output, constant.MaxLogSize)
|
||||
compressed, err = utils.CompressToBase64(trimmedOutput)
|
||||
if err != nil {
|
||||
logger.Errorf("[TaskLog] 压缩日志失败: %v", err)
|
||||
compressed = ""
|
||||
|
||||
@@ -4,11 +4,13 @@ import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"sync"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/engigu/baihu-panel/internal/constant"
|
||||
"github.com/engigu/baihu-panel/internal/utils"
|
||||
)
|
||||
|
||||
@@ -236,6 +238,33 @@ func (l *TinyLog) CompressAndCleanup() (string, error) {
|
||||
zw := utils.GetZlibWriter(b64Writer)
|
||||
defer utils.PutZlibWriter(zw)
|
||||
|
||||
// 获取文件大小
|
||||
stat, err := f.Stat()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
size := stat.Size()
|
||||
maxSize := int64(constant.MaxLogSize)
|
||||
if maxSize < 1024*1024 {
|
||||
maxSize = 1024 * 1024
|
||||
}
|
||||
|
||||
var readStart int64 = 0
|
||||
if size > maxSize {
|
||||
readStart = size - maxSize
|
||||
// 写入一条截断提示
|
||||
truncatedMsg := fmt.Sprintf("\n\n[System] 日志过长,已自动截断,仅保留末尾 %d MB...\n\n", maxSize/1024/1024)
|
||||
if _, err := zw.Write([]byte(truncatedMsg)); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
if readStart > 0 {
|
||||
if _, err := f.Seek(readStart, io.SeekStart); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
// 流处理: 文件 -> Zlib -> Base64 -> 缓冲区
|
||||
if _, err := io.Copy(zw, f); err != nil {
|
||||
return "", err
|
||||
|
||||
Reference in New Issue
Block a user