package log import ( "fmt" "git.giftfish.de/ston1th/docstore/pkg/core" "sync" ) const defaultSize = 500 type ScanLog struct { // protects logs sync.RWMutex size int logs []string } func NewScanLog(size int) *ScanLog { if size <= 0 { size = defaultSize } return &ScanLog{size: size} } func (l *ScanLog) Printf(f string, v ...interface{}) { s := fmt.Sprintf(f, v...) Println(s) s = core.LogTime() + s l.Lock() logsLen := len(l.logs) if logsLen < l.size { l.logs = append(l.logs, s) } else if logsLen == l.size { l.logs = append(l.logs[1:], s) } l.Unlock() } func (l *ScanLog) Logs() (logs string) { l.RLock() for _, v := range l.logs { logs += "\n" + v } l.RUnlock() return }