uniugm/admin/lib/xlog/handler/handler_file.go
2025-04-18 17:17:23 +08:00

59 lines
1019 B
Go

package handler
import (
"os"
"path"
"sync"
)
// FileHandler writes xlog to a file.
type FileHandler struct {
fileName string
flag int
fd *os.File
fdLock *sync.RWMutex
}
func NewFileHandler(fileName string, flag int) (*FileHandler, error) {
dir := path.Dir(fileName)
os.Mkdir(dir, 0777)
f, err := os.OpenFile(fileName, flag, 0666)
if err != nil {
return nil, err
}
h := new(FileHandler)
h.fileName = fileName
h.flag = flag
h.fd = f
h.fdLock = &sync.RWMutex{}
return h, nil
}
//func (h *FileHandler) Rotate() {
// fd, err := os.OpenFile(h.fileName, h.flag, 0666)
// if err != nil {
// h.fd.Write([]byte(fmt.Sprintf("interval check xlog file %v open error:%v", h.fileName, err)))
// return
// }
//
// h.fdLock.Lock()
// oldFd := h.fd
// h.fd = fd
// oldFd.Close()
// h.fdLock.Unlock()
//}
func (h *FileHandler) Write(b []byte) (n int, err error) {
h.fdLock.RLock()
defer h.fdLock.RUnlock()
return h.fd.Write(b)
}
func (h *FileHandler) Close() error {
return h.fd.Close()
}