Git Repository
miniaudiolib
miniaudiolib scannt lokale Musik- und Hörbuchordner, liest Audio-Metadaten und Cover, verwaltet Favoriten und Playlists und streamt Titel direkt an den Browser.
HTTPS
https://zanvex.de/git/miniaudiolib.gitinternal/logging/rotate.go
Zum Verzeichnispackage logging
import (
"os"
"path/filepath"
"sync"
)
type RotatingWriter struct {
mu sync.Mutex
path string
max int64
file *os.File
}
func NewRotatingWriter(path string, max int64) (*RotatingWriter, error) {
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
return nil, err
}
w := &RotatingWriter{path: path, max: max}
return w, w.open()
}
func (w *RotatingWriter) open() error {
f, e := os.OpenFile(w.path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
w.file = f
return e
}
func (w *RotatingWriter) Write(p []byte) (int, error) {
w.mu.Lock()
defer w.mu.Unlock()
if st, e := w.file.Stat(); e == nil && st.Size()+int64(len(p)) > w.max {
w.file.Close()
os.Remove(w.path + ".3")
os.Rename(w.path+".2", w.path+".3")
os.Rename(w.path+".1", w.path+".2")
os.Rename(w.path, w.path+".1")
if e = w.open(); e != nil {
return 0, e
}
}
return w.file.Write(p)
}
func (w *RotatingWriter) Close() error { w.mu.Lock(); defer w.mu.Unlock(); return w.file.Close() }