github.com/git-chglog/git-chglog@v0.15.5-0.20240126074033-6a6993d52d69/logger.go (about) 1 package chglog 2 3 import ( 4 "fmt" 5 "io" 6 "log" 7 "regexp" 8 9 "github.com/fatih/color" 10 "github.com/kyokomi/emoji/v2" 11 ) 12 13 // Logger ... 14 type Logger struct { 15 stdout io.Writer 16 stderr io.Writer 17 silent bool 18 noEmoji bool 19 reEmoji *regexp.Regexp 20 } 21 22 // NewLogger ... 23 func NewLogger(stdout, stderr io.Writer, silent, noEmoji bool) *Logger { 24 return &Logger{ 25 stdout: stdout, 26 stderr: stderr, 27 silent: silent, 28 noEmoji: noEmoji, 29 reEmoji: regexp.MustCompile(`:[\w\+_\-]+:\s?`), 30 } 31 } 32 33 // Log ... 34 func (l *Logger) Log(msg string) { 35 if !l.silent { 36 l.log(l.stdout, msg+"\n") 37 } 38 } 39 40 // Error ... 41 func (l *Logger) Error(msg string) { 42 prefix := color.New(color.FgWhite, color.BgRed, color.Bold).SprintFunc() 43 l.log(l.stderr, fmt.Sprintf("%s %s\n", prefix(" ERROR "), color.RedString(msg))) 44 } 45 46 func (l *Logger) log(w io.Writer, msg string) { 47 var printer func(io.Writer, ...interface{}) (int, error) 48 49 if l.noEmoji { 50 msg = l.reEmoji.ReplaceAllString(msg, "") 51 printer = fmt.Fprint 52 } else { 53 printer = emoji.Fprint 54 } 55 56 if _, err := printer(w, msg); err != nil { 57 log.Fatalln(err) 58 } 59 }