package log
import (
"io"
"go.uber.org/multierr"
"go.uber.org/zap/zapcore"
)
type PipeReader struct {
r *io .PipeReader
closer io .Closer
core zapcore .Core
}
func (p *PipeReader ) Read (data []byte ) (int , error ) {
return p .r .Read (data )
}
func (p *PipeReader ) Close () error {
if p .core != nil {
loggerCore .DeleteCore (p .core )
}
return multierr .Append (p .core .Sync (), p .closer .Close ())
}
func NewPipeReader (opts ...PipeReaderOption ) *PipeReader {
opt := pipeReaderOptions {
format : JSONOutput ,
level : LevelDebug ,
}
for _ , o := range opts {
o .setOption (&opt )
}
r , w := io .Pipe ()
p := &PipeReader {
r : r ,
closer : w ,
core : newCore (opt .format , zapcore .AddSync (w ), opt .level ),
}
loggerCore .AddCore (p .core )
return p
}
type pipeReaderOptions struct {
format LogFormat
level LogLevel
}
type PipeReaderOption interface {
setOption(*pipeReaderOptions )
}
type pipeReaderOptionFunc func (*pipeReaderOptions )
func (p pipeReaderOptionFunc ) setOption (o *pipeReaderOptions ) {
p (o )
}
func PipeFormat (format LogFormat ) PipeReaderOption {
return pipeReaderOptionFunc (func (o *pipeReaderOptions ) {
o .format = format
})
}
func PipeLevel (level LogLevel ) PipeReaderOption {
return pipeReaderOptionFunc (func (o *pipeReaderOptions ) {
o .level = level
})
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .