nekoray/go/pkg/neko_log/log.go
2022-09-27 12:39:40 +08:00

52 lines
917 B
Go

package neko_log
import (
"fmt"
"io"
"os"
)
var f_neko_log *os.File
var LogWriter *logWriter
func SetupLog(maxSize int, path string) {
if f_neko_log != nil && LogWriter != nil {
return
}
// mod from libcore, simplify because only 1 proccess.
oldBytes, err := os.ReadFile(path)
if err == nil && len(oldBytes) > maxSize {
if os.Truncate(path, 0) == nil {
oldBytes = oldBytes[len(oldBytes)-maxSize:]
}
}
f_neko_log, err = os.OpenFile(path, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0644)
if err == nil {
f_neko_log.Write(oldBytes)
} else {
fmt.Println("error open log", err)
}
//
LogWriter = &logWriter{
files: []io.Writer{os.Stdout, f_neko_log},
}
}
type logWriter struct {
files []io.Writer
}
func (w *logWriter) Write(p []byte) (n int, err error) {
for _, file := range w.files {
if file == nil {
continue
}
n, err = file.Write(p)
if err != nil {
return
}
}
return
}