forked from go-ozzo/ozzo-log
/
target_writecloser.go
48 lines (41 loc) · 997 Bytes
/
target_writecloser.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
// Copyright 2021 Hank Shen. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package log
import (
"io"
)
// WriteCloserTarget writes filtered log messages to a io.WriteCloser.
type WriteCloserTarget struct {
io.WriteCloser
*Filter
close chan bool
}
// NewWriteCloserTarget creates a WriteCloserTarget.
func NewWriteCloserTarget(w io.WriteCloser) *WriteCloserTarget {
return &WriteCloserTarget{
WriteCloser: w,
Filter: &Filter{MaxLevel: LevelDebug},
close: make(chan bool),
}
}
// Open nothing.
func (t *WriteCloserTarget) Open(errWriter io.Writer) (err error) {
return nil
}
// Process writes a log message using Writer.
func (t *WriteCloserTarget) Process(e *Entry) {
if e == nil {
t.close <- true
return
}
if !t.Allow(e) {
return
}
t.Write([]byte(e.String() + "\n"))
}
// Close closes the file target.
func (t *WriteCloserTarget) Close() {
<-t.close
t.WriteCloser.Close()
}