feat recorder: add rotate options

This commit is contained in:
Denis Galeev
2025-02-06 17:34:13 +03:00
committed by ginuerzh
parent 75a106ee84
commit e4b1c3c2b5
3 changed files with 45 additions and 19 deletions
+10 -14
View File
@@ -2,7 +2,7 @@ package recorder
import (
"context"
"os"
"io"
"github.com/go-gost/core/recorder"
)
@@ -20,40 +20,36 @@ func SepRecorderOption(sep string) FileRecorderOption {
}
type fileRecorder struct {
filename string
sep string
out io.WriteCloser
sep string
}
// FileRecorder records data to file.
func FileRecorder(filename string, opts ...FileRecorderOption) recorder.Recorder {
func FileRecorder(out io.WriteCloser, opts ...FileRecorderOption) recorder.Recorder {
var options fileRecorderOptions
for _, opt := range opts {
opt(&options)
}
return &fileRecorder{
filename: filename,
sep: options.sep,
out: out,
sep: options.sep,
}
}
func (r *fileRecorder) Record(ctx context.Context, b []byte, opts ...recorder.RecordOption) error {
f, err := os.OpenFile(r.filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
if _, err := r.out.Write(b); err != nil {
return err
}
defer f.Close()
if _, err = f.Write(b); err != nil {
return err
}
if r.sep != "" {
_, err := f.WriteString(r.sep)
_, err := io.WriteString(r.out, r.sep)
return err
}
return nil
}
func (r *fileRecorder) Close() error {
return nil
return r.out.Close()
}