package engine import ( "fmt" "sync" "time" ) type LogEntry struct { ID int64 `json:"id"` Time string `json:"time"` Level string `json:"level"` Message string `json:"message"` } type Logger struct { mu sync.Mutex nextID int64 entries []LogEntry } func NewLogger() *Logger { return &Logger{} } func (l *Logger) Add(level, format string, args ...any) { l.mu.Lock() defer l.mu.Unlock() l.nextID++ entry := LogEntry{ID: l.nextID, Time: time.Now().Format("15:04:05"), Level: level, Message: fmt.Sprintf(format, args...)} l.entries = append(l.entries, entry) if len(l.entries) > 600 { l.entries = l.entries[len(l.entries)-600:] } } func (l *Logger) Since(id int64) []LogEntry { l.mu.Lock() defer l.mu.Unlock() out := make([]LogEntry, 0) for _, e := range l.entries { if e.ID > id { out = append(out, e) } } return out }