A Go package that provides a file writer with support for reopening the underlying file, ideal for handling log rotation (e.g., with logrotate).
- Implements io.Writer interface for seamless integration
- Thread-safe operations with mutex protection
- Explicit ReOpen() method to refresh file descriptor
- Tracks last file open time
- Proper resource cleanup with Close()
package main
import (
"os"
"github.com/cevin/reopen-writer"
)
func main() {
writer, _ := rewriter.NewReopenWriter("dest.log")
defer writer.Close()
writer.Write([]byte("demo"))
os.Rename("dest.log", "dest.log.1")
writer.ReOpen()
writer.Write([]byte("demo2"))
}...
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGUSR1)
for {
select {
case <-ch:
writer.ReOpen()
}
}
...
# kill -USR1 $(cat /run/x.pid)