github.com/fredbi/git-chglog@v0.0.0-20190706071416-d35c598eac81/cmd/git-chglog/logger.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"log"
     7  	"regexp"
     8  
     9  	"github.com/fatih/color"
    10  	emoji "gopkg.in/kyokomi/emoji.v1"
    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  }