mirror of
https://github.com/git-chglog/git-chglog.git
synced 2026-01-23 02:15:12 +00:00
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package chglog
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"regexp"
|
|
|
|
"github.com/fatih/color"
|
|
emoji "github.com/kyokomi/emoji/v2"
|
|
)
|
|
|
|
// Logger ...
|
|
type Logger struct {
|
|
stdout io.Writer
|
|
stderr io.Writer
|
|
silent bool
|
|
noEmoji bool
|
|
reEmoji *regexp.Regexp
|
|
}
|
|
|
|
// NewLogger ...
|
|
func NewLogger(stdout, stderr io.Writer, silent, noEmoji bool) *Logger {
|
|
return &Logger{
|
|
stdout: stdout,
|
|
stderr: stderr,
|
|
silent: silent,
|
|
noEmoji: noEmoji,
|
|
reEmoji: regexp.MustCompile(":[\\w\\+_\\-]+:\\s?"),
|
|
}
|
|
}
|
|
|
|
// Log ...
|
|
func (l *Logger) Log(msg string) {
|
|
if !l.silent {
|
|
l.log(l.stdout, msg+"\n")
|
|
}
|
|
}
|
|
|
|
// Error ...
|
|
func (l *Logger) Error(msg string) {
|
|
prefix := color.New(color.FgWhite, color.BgRed, color.Bold).SprintFunc()
|
|
l.log(l.stderr, fmt.Sprintf("%s %s\n", prefix(" ERROR "), color.RedString(msg)))
|
|
}
|
|
|
|
func (l *Logger) log(w io.Writer, msg string) {
|
|
var printer func(io.Writer, ...interface{}) (int, error)
|
|
|
|
if l.noEmoji {
|
|
msg = l.reEmoji.ReplaceAllString(msg, "")
|
|
printer = fmt.Fprint
|
|
} else {
|
|
printer = emoji.Fprint
|
|
}
|
|
|
|
if _, err := printer(w, msg); err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
}
|