feat: add structured logging system for Docker deployment
添加日志系统,支持 Docker logs 捕获: - 新增 logger 模块,提供 Info/Warn/Error/Debug 等日志级别 - 任务生命周期日志:创建、开始、完成、失败、取消 - 用户登录/登出日志 - 服务启动和 FFmpeg 状态日志 - 数据库初始化日志 日志格式:[时间] [级别] 消息,便于 Docker logs 查看 Co-Authored-By: AI
This commit is contained in:
+11
-5
@@ -7,7 +7,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -20,6 +19,7 @@ import (
|
||||
|
||||
"bilidown/internal/bilibili"
|
||||
"bilidown/internal/common"
|
||||
"bilidown/internal/logger"
|
||||
"bilidown/internal/util"
|
||||
)
|
||||
|
||||
@@ -83,6 +83,7 @@ func CancelTask(taskID int64) bool {
|
||||
if task.ID == taskID && (task.Status == "waiting" || task.Status == "running") {
|
||||
task.Cancelled = true
|
||||
task.Status = "error"
|
||||
logger.TaskCancelled(task.ID, task.Title)
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -111,6 +112,7 @@ func (task *Task) Create(db *sql.DB) error {
|
||||
|
||||
task.ID, err = result.LastInsertId()
|
||||
task.CreateAt = time.Now()
|
||||
logger.TaskCreated(task.ID, task.Title, task.Bvid)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -155,6 +157,7 @@ func (task *Task) Start() {
|
||||
}
|
||||
|
||||
task.UpdateStatus(db, "running")
|
||||
logger.TaskStarted(task.ID, task.Title)
|
||||
|
||||
if task.DownloadType == "audio" {
|
||||
// 仅音频模式:只下载音频,重命名音频文件为输出文件
|
||||
@@ -178,9 +181,10 @@ func (task *Task) Start() {
|
||||
}
|
||||
// 添加元数据
|
||||
if err := task.addMetadata(outputPath); err != nil {
|
||||
log.Printf("添加元数据失败 (任务ID: %d): %v", task.ID, err)
|
||||
logger.Warnf("添加元数据失败 #%d: %v", task.ID, err)
|
||||
}
|
||||
task.UpdateStatus(db, "done")
|
||||
logger.TaskCompleted(task.ID, task.Title, time.Since(task.CreateAt))
|
||||
return
|
||||
} else if task.DownloadType == "video" {
|
||||
// 仅视频模式:只下载视频,重命名视频文件为输出文件
|
||||
@@ -204,9 +208,10 @@ func (task *Task) Start() {
|
||||
}
|
||||
// 添加元数据
|
||||
if err := task.addMetadata(outputPath); err != nil {
|
||||
log.Printf("添加元数据失败 (任务ID: %d): %v", task.ID, err)
|
||||
logger.Warnf("添加元数据失败 #%d: %v", task.ID, err)
|
||||
}
|
||||
task.UpdateStatus(db, "done")
|
||||
logger.TaskCompleted(task.ID, task.Title, time.Since(task.CreateAt))
|
||||
return
|
||||
} else {
|
||||
// 合并模式:下载音频和视频,然后合并
|
||||
@@ -262,7 +267,7 @@ func (task *Task) Start() {
|
||||
GlobalMergeSem.Release()
|
||||
// 添加元数据
|
||||
if err := task.addMetadata(outputPath); err != nil {
|
||||
log.Printf("添加元数据失败 (任务ID: %d): %v", task.ID, err)
|
||||
logger.Warnf("添加元数据失败 #%d: %v", task.ID, err)
|
||||
}
|
||||
task.UpdateStatus(db, "done")
|
||||
}
|
||||
@@ -356,8 +361,9 @@ func (task *Task) UpdateStatus(db *sql.DB, status TaskStatus, errs ...error) err
|
||||
if err != nil {
|
||||
err = util.CreateLog(db, fmt.Sprintf("Task-%d-Error: %v", task.ID, err))
|
||||
if err != nil {
|
||||
log.Fatalln("CreateLog:", err)
|
||||
logger.Fatal("CreateLog: " + err.Error())
|
||||
}
|
||||
logger.TaskFailed(task.ID, task.Title, err)
|
||||
}
|
||||
}
|
||||
task.Status = status
|
||||
|
||||
Reference in New Issue
Block a user