-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathbuffer.go
73 lines (60 loc) · 1.69 KB
/
buffer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package handler
import (
"io"
"os"
"github.com/gookit/slog"
"github.com/gookit/slog/bufwrite"
)
// NewBuffered create new BufferedHandler
func NewBuffered(w io.WriteCloser, bufSize int, levels ...slog.Level) *FlushCloseHandler {
return NewBufferedHandler(w, bufSize, levels...)
}
// NewBufferedHandler create new BufferedHandler
func NewBufferedHandler(w io.WriteCloser, bufSize int, levels ...slog.Level) *FlushCloseHandler {
if len(levels) == 0 {
levels = slog.AllLevels
}
out := bufwrite.NewBufIOWriterSize(w, bufSize)
return FlushCloserWithLevels(out, levels)
}
// LineBufferedFile handler
func LineBufferedFile(logfile string, bufSize int, levels []slog.Level) (slog.Handler, error) {
cfg := NewConfig(
WithLogfile(logfile),
WithBuffSize(bufSize),
WithLogLevels(levels),
WithBuffMode(BuffModeLine),
)
out, err := cfg.CreateWriter()
if err != nil {
return nil, err
}
return SyncCloserWithLevels(out, levels), nil
}
// LineBuffOsFile handler
func LineBuffOsFile(f *os.File, bufSize int, levels []slog.Level) slog.Handler {
if f == nil {
panic("slog: the os file cannot be nil")
}
out := bufwrite.NewLineWriterSize(f, bufSize)
return SyncCloserWithLevels(out, levels)
}
// LineBuffWriter handler
func LineBuffWriter(w io.Writer, bufSize int, levels []slog.Level) slog.Handler {
if w == nil {
panic("slog: the io writer cannot be nil")
}
out := bufwrite.NewLineWriterSize(w, bufSize)
return IOWriterWithLevels(out, levels)
}
//
// --------- wrap a handler with buffer ---------
//
// FormatWriterHandler interface
type FormatWriterHandler interface {
slog.Handler
// Formatter record formatter
Formatter() slog.Formatter
// Writer the output writer
Writer() io.Writer
}