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:
+21
-13
@@ -8,6 +8,7 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"bilidown/internal/logger"
|
||||
"bilidown/internal/router"
|
||||
"bilidown/internal/util"
|
||||
|
||||
@@ -28,12 +29,10 @@ var ffmpegAvailable bool
|
||||
|
||||
func main() {
|
||||
ffmpegAvailable = checkFFmpeg()
|
||||
logger.FFmpegStatus(ffmpegAvailable)
|
||||
mustInitTables()
|
||||
mustRunServer()
|
||||
fmt.Printf("Bilidown %s server running at %s\n", VERSION, urlLocal)
|
||||
if !ffmpegAvailable {
|
||||
fmt.Println("Warning: FFmpeg is not installed. Video download will not work.")
|
||||
}
|
||||
logger.ServerStarted(HTTP_PORT, VERSION)
|
||||
select {} // 保持运行
|
||||
}
|
||||
|
||||
@@ -48,7 +47,7 @@ func mustRunServer() {
|
||||
// 从嵌入的文件系统中获取静态文件
|
||||
staticFS, err := fs.Sub(staticFiles, "static")
|
||||
if err != nil {
|
||||
log.Fatal("Failed to load static files:", err)
|
||||
logger.Fatal("加载静态文件失败: " + err.Error())
|
||||
}
|
||||
// 前端静态文件
|
||||
http.Handle("/", http.FileServer(http.FS(staticFS)))
|
||||
@@ -77,7 +76,7 @@ func mustInitTables() {
|
||||
"name" TEXT PRIMARY KEY NOT NULL,
|
||||
"value" TEXT
|
||||
)`); err != nil {
|
||||
log.Fatalln("create table field:", err)
|
||||
logger.Fatal("创建 field 表失败: " + err.Error())
|
||||
}
|
||||
|
||||
if _, err := db.Exec(`CREATE TABLE IF NOT EXISTS "log" (
|
||||
@@ -85,7 +84,7 @@ func mustInitTables() {
|
||||
"content" TEXT NOT NULL,
|
||||
"create_at" text NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)`); err != nil {
|
||||
log.Fatalln("create table log:", err)
|
||||
logger.Fatal("创建 log 表失败: " + err.Error())
|
||||
}
|
||||
|
||||
if _, err := db.Exec(`CREATE TABLE IF NOT EXISTS "task" (
|
||||
@@ -102,21 +101,23 @@ func mustInitTables() {
|
||||
"download_type" text NOT NULL DEFAULT 'merge',
|
||||
"create_at" text NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)`); err != nil {
|
||||
log.Fatalln("create table task:", err)
|
||||
logger.Fatal("创建 task 表失败: " + err.Error())
|
||||
}
|
||||
|
||||
if _, err := util.GetCurrentFolder(db); err != nil {
|
||||
log.Fatalln("util.GetCurrentFolder:", err)
|
||||
logger.Fatal("获取下载目录失败: " + err.Error())
|
||||
}
|
||||
|
||||
if err := initHistoryTask(db); err != nil {
|
||||
log.Fatalln("initHistoryTask:", err)
|
||||
logger.Fatal("初始化历史任务失败: " + err.Error())
|
||||
}
|
||||
|
||||
// 添加可能缺失的列(用于数据库迁移)
|
||||
if err := addMissingColumns(db); err != nil {
|
||||
log.Fatalln("addMissingColumns:", err)
|
||||
logger.Fatal("添加缺失列失败: " + err.Error())
|
||||
}
|
||||
|
||||
logger.Info("数据库初始化完成")
|
||||
}
|
||||
|
||||
// addMissingColumns 添加可能缺失的列(用于数据库迁移)
|
||||
@@ -131,7 +132,14 @@ func addMissingColumns(db *sql.DB) error {
|
||||
// initHistoryTask 将上一次程序运行时未完成的任务状态变为 error
|
||||
func initHistoryTask(db *sql.DB) error {
|
||||
util.SqliteLock.Lock()
|
||||
_, err := db.Exec(`UPDATE "task" SET "status" = 'error' WHERE "status" IN ('waiting', 'running')`)
|
||||
result, err := db.Exec(`UPDATE "task" SET "status" = 'error' WHERE "status" IN ('waiting', 'running')`)
|
||||
util.SqliteLock.Unlock()
|
||||
return err
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rowsAffected, _ := result.RowsAffected()
|
||||
if rowsAffected > 0 {
|
||||
logger.Infof("重置 %d 个未完成任务状态为 error", rowsAffected)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user