-
Notifications
You must be signed in to change notification settings - Fork 0
golang zap logger
foolmacky edited this page Jun 22, 2021
·
3 revisions
- bytes.BufferにWriteをかけたいと思うが、bytes.Bufferはconcurrent safeではないので、複数のgoroutineから出力する場合などは、独自にlock制御を実装する必要がある
type lockBuff struct {
sync.Mutex
ws zapcore.WriteSyncer
}
func newLockedBuff(b *bytes.Buffer) *lockedBuff {
return &lockedBuff{ ws: zapcore.AddSync(b)}
}
func(lb *lockedBuff) Write(bs []byte) (int error) {
lb.Lock()
n, err := lb.ws.Write(bs)
lb.Unlock()
return n, err
}
func(lb *lockedBuff) Sync() error {
lb.Lock()
err := lb.ws.Sync()
lb.Unlock()
return err
}
//このstructを使う
lb := newLockedBuff(buf)
w := zapcore.NewMultiWriteSyncer(os.Stdout, lb)
c := zapcore.NewCore(
zapcore.NewConsoleEncoder(cfg),
zapcore.AddSync(writer),
cfglevel,
)
: