package slog import ( "fmt" "os" "sync" ) type FileLogger struct { w *os.File l sync.Mutex } func (f *FileLogger) Write(p []byte) (n int, err error) { if w == nil { return 0, fmt.Errorf("No file handle available") } l.Lock() defer func() { w.Sync() l.Unlock() }() return w.Write(p) } func NewFileLogger(file string) (ret io.Writer, err error) { rret := &FileLogger{} if rret.w, err = os.OpenFile(file, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil { return nil, err } return rret }