重构:添加结构化日志支持

- 引入 slog 替代 fmt.Printf 日志输出
- Database 和 Table 支持自定义 Logger
- 优化错误和警告信息的结构化记录
- 改进 Compaction 配置传递机制
- 完善数据库和表的初始化流程
This commit is contained in:
2025-10-10 20:26:18 +08:00
parent 65bdf1c50d
commit 3148bf226d
3 changed files with 433 additions and 82 deletions

View File

@@ -3,6 +3,8 @@ package srdb
import (
"encoding/json"
"fmt"
"io"
"log/slog"
"os"
"path/filepath"
"reflect"
@@ -28,6 +30,7 @@ type Table struct {
memtableManager *MemTableManager // MemTable 管理器
versionSet *VersionSet // MANIFEST 管理器
compactionManager *CompactionManager // Compaction 管理器
logger *slog.Logger // 日志器
seq atomic.Int64
flushMu sync.Mutex
@@ -142,7 +145,11 @@ func OpenTable(opts *TableOptions) (*Table, error) {
err := indexMgr.CreateIndex(field.Name)
if err != nil {
// 索引创建失败,记录警告但不阻塞表创建
fmt.Fprintf(os.Stderr, "[WARNING] Failed to create index for field %s: %v\n", field.Name, err)
// 此时使用临时 loggerTable 还未完全创建)
tmpLogger := slog.New(slog.NewTextHandler(os.Stderr, nil))
tmpLogger.Warn("[Table] Failed to create index for field",
"field", field.Name,
"error", err)
}
}
}
@@ -176,6 +183,7 @@ func OpenTable(opts *TableOptions) (*Table, error) {
sstManager: sstMgr,
memtableManager: memMgr,
versionSet: versionSet,
logger: slog.New(slog.NewTextHandler(io.Discard, nil)), // 默认丢弃日志
}
// 先恢复数据(包括从 WAL 恢复)
@@ -446,6 +454,11 @@ func (t *Table) insertSingle(data map[string]any) error {
return nil
}
// SetLogger 设置 logger由 Database 调用)
func (t *Table) SetLogger(logger *slog.Logger) {
t.logger = logger
}
// Get 查询数据
func (t *Table) Get(seq int64) (*SSTableRow, error) {
// 1. 先查 MemTable Manager (Active + Immutables)