go-hep.org/x/hep@v0.38.1/fwk/msgstream.go (about) 1 // Copyright ©2017 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fwk 6 7 import ( 8 "fmt" 9 "io" 10 "os" 11 ) 12 13 // WriteSyncer is an io.Writer which can be sync'ed/flushed. 14 type WriteSyncer interface { 15 io.Writer 16 Sync() error 17 } 18 19 type msgstream struct { 20 lvl Level 21 w WriteSyncer 22 n string 23 } 24 25 // NewMsgStream creates a new MsgStream value with name name and minimum 26 // verbosity level lvl. 27 // This MsgStream will print messages into w. 28 func NewMsgStream(name string, lvl Level, w WriteSyncer) MsgStream { 29 return newMsgStream(name, lvl, w) 30 } 31 32 func newMsgStream(name string, lvl Level, w WriteSyncer) msgstream { 33 if w == nil { 34 w = os.Stdout 35 } 36 37 return msgstream{ 38 lvl: lvl, 39 w: w, 40 n: fmt.Sprintf("%-20s ", name), 41 } 42 } 43 44 // Debugf displays a (formated) DBG message 45 func (msg msgstream) Debugf(format string, a ...any) { 46 msg.Msg(LvlDebug, format, a...) 47 } 48 49 // Infof displays a (formated) INFO message 50 func (msg msgstream) Infof(format string, a ...any) { 51 msg.Msg(LvlInfo, format, a...) 52 } 53 54 // Warnf displays a (formated) WARN message 55 func (msg msgstream) Warnf(format string, a ...any) { 56 defer msg.flush() 57 msg.Msg(LvlWarning, format, a...) 58 } 59 60 // Errorf displays a (formated) ERR message 61 func (msg msgstream) Errorf(format string, a ...any) { 62 defer msg.flush() 63 msg.Msg(LvlError, format, a...) 64 } 65 66 // Msg displays a (formated) message with level lvl. 67 func (msg msgstream) Msg(lvl Level, format string, a ...any) { 68 if lvl < msg.lvl { 69 return 70 } 71 format = msg.n + msg.lvl.msgstring() + " " + format 72 fmt.Fprintf(msg.w, format, a...) 73 } 74 75 func (msg msgstream) flush() error { 76 return msg.w.Sync() 77 }