github.com/Benchkram/bob@v0.0.0-20220321080157-7c8f3876e225/pkg/composectl/logger.go (about) 1 package composectl 2 3 import ( 4 "fmt" 5 "github.com/docker/compose/v2/pkg/api" 6 "github.com/logrusorgru/aurora" 7 "io" 8 ) 9 10 var colorPool = []aurora.Color{ 11 aurora.BlueFg, 12 aurora.GreenFg, 13 aurora.CyanFg, 14 aurora.MagentaFg, 15 aurora.YellowFg, 16 aurora.RedFg, 17 } 18 19 type logger struct { 20 writer io.Writer 21 containerColors map[string]aurora.Color 22 } 23 24 var _ api.LogConsumer = (*logger)(nil) 25 26 func NewLogConsumer(w io.Writer) (*logger, error) { 27 return &logger{ 28 writer: w, 29 containerColors: map[string]aurora.Color{}, 30 }, nil 31 } 32 33 func (l *logger) colorize(cid string) string { 34 color, ok := l.containerColors[cid] 35 if ok { 36 return aurora.Colorize(cid, color).String() 37 } 38 39 color = colorPool[len(l.containerColors)%len(colorPool)] 40 l.containerColors[cid] = color 41 42 return aurora.Colorize(cid, color).String() 43 } 44 45 func (l *logger) Log(_, container, msg string) { 46 _, _ = l.writer.Write([]byte(fmt.Sprintf("[%s] %s\n", l.colorize(container), msg))) 47 } 48 49 func (l *logger) Status(container, msg string) { 50 _, _ = l.writer.Write([]byte(fmt.Sprintf("[%s] %s\n", l.colorize(container), msg))) 51 } 52 53 func (l *logger) Register(container string) { 54 _, _ = l.writer.Write([]byte(fmt.Sprintf("[%s] registered\n", l.colorize(container)))) 55 }