docstore/pkg/log/scanlog.go
2019-08-24 14:27:58 +02:00

47 lines
713 B
Go

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
}