1
0
mirror of https://github.com/go-kratos/kratos.git synced 2025-01-22 03:38:41 +02:00
kratos/log/std.go
Tony Chen 18d43d6006
add logger wrapper (#715)
* add logger wrapper
2021-02-22 17:50:43 +08:00

46 lines
768 B
Go

package log
import (
"bytes"
"fmt"
"io"
"log"
"sync"
)
var _ Logger = (*stdLogger)(nil)
type stdLogger struct {
log *log.Logger
pool *sync.Pool
}
// NewStdLogger new a std logger with options.
func NewStdLogger(w io.Writer) Logger {
return &stdLogger{
log: log.New(w, "", log.LstdFlags),
pool: &sync.Pool{
New: func() interface{} {
return new(bytes.Buffer)
},
},
}
}
// Print print the kv pairs log.
func (s *stdLogger) Print(kvpair ...interface{}) {
if len(kvpair) == 0 {
return
}
if len(kvpair)%2 != 0 {
kvpair = append(kvpair, "")
}
buf := s.pool.Get().(*bytes.Buffer)
for i := 0; i < len(kvpair); i += 2 {
fmt.Fprintf(buf, "%s=%v ", kvpair[i], kvpair[i+1])
}
s.log.Println(buf.String())
buf.Reset()
s.pool.Put(buf)
}