Files
BackupX/server/internal/backup/logger.go
2026-03-17 13:29:09 +08:00

57 lines
1.1 KiB
Go

package backup
import (
"fmt"
"strings"
"sync"
)
type ExecutionLogger struct {
recordID uint
hub *LogHub
mu sync.Mutex
buffer strings.Builder
}
func NewExecutionLogger(recordID uint, hub *LogHub) *ExecutionLogger {
return &ExecutionLogger{recordID: recordID, hub: hub}
}
func (l *ExecutionLogger) Write(level, message string) {
trimmed := strings.TrimSpace(message)
if trimmed == "" {
return
}
l.mu.Lock()
defer l.mu.Unlock()
if l.buffer.Len() > 0 {
l.buffer.WriteByte('\n')
}
l.buffer.WriteString(trimmed)
if l.hub != nil {
l.hub.Append(l.recordID, level, trimmed)
}
}
func (l *ExecutionLogger) Infof(format string, args ...any) {
l.Write("info", fmt.Sprintf(format, args...))
}
func (l *ExecutionLogger) Errorf(format string, args ...any) {
l.Write("error", fmt.Sprintf(format, args...))
}
func (l *ExecutionLogger) Warnf(format string, args ...any) {
l.Write("warn", fmt.Sprintf(format, args...))
}
func (l *ExecutionLogger) WriteLine(message string) {
l.Infof("%s", message)
}
func (l *ExecutionLogger) String() string {
l.mu.Lock()
defer l.mu.Unlock()
return l.buffer.String()
}