Merge pull request #411 from hezhizhen/logger-support-no-color

feat: support NO_COLOR environment variable
This commit is contained in:
Masayuki Matsuki 2025-03-25 23:11:27 +09:00 committed by GitHub
commit e50e60bbc2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 87 additions and 28 deletions

View file

@ -4,33 +4,63 @@ import (
"fmt"
"io"
"os"
"strings"
"github.com/motemen/go-colorine"
)
var logger = colorine.NewLogger(
colorine.Prefixes{
"git": colorine.Verbose,
"hg": colorine.Verbose,
"svn": colorine.Verbose,
"darcs": colorine.Verbose,
"pijul": colorine.Verbose,
"bzr": colorine.Verbose,
"fossil": colorine.Verbose,
"skip": colorine.Verbose,
"cd": colorine.Verbose,
"resolved": colorine.Verbose,
var (
NoColor = colorine.TextStyle{Foreground: colorine.None, Background: colorine.None}
VerboseColor = colorine.Verbose // white
InfoColor = colorine.Info // green
NoticeColor = colorine.Notice // blue
WarnColor = colorine.Warn // yellow
ErrorColor = colorine.Error // red
)
"open": colorine.Warn,
"exists": colorine.Warn,
"warning": colorine.Warn,
var (
logger = colorine.NewLogger( // default logger with color
colorine.Prefixes{
// verbose
"git": VerboseColor,
"hg": VerboseColor,
"svn": VerboseColor,
"darcs": VerboseColor,
"pijul": VerboseColor,
"bzr": VerboseColor,
"fossil": VerboseColor,
"skip": VerboseColor,
"cd": VerboseColor,
"resolved": VerboseColor,
// notice
"authorized": NoticeColor,
// warn
"open": WarnColor,
"exists": WarnColor,
"warning": WarnColor,
// error
"error": ErrorColor,
},
InfoColor, // default is info
)
"authorized": colorine.Notice,
"error": colorine.Error,
}, colorine.Info)
loggerWithoutColor = colorine.NewLogger(
colorine.Prefixes{},
NoColor,
)
)
func init() {
SelectLogger()
}
func SelectLogger() {
v := os.Getenv("NO_COLOR")
if strings.ToLower(v) == "true" {
logger = loggerWithoutColor
}
SetOutput(os.Stderr)
}
@ -39,12 +69,12 @@ func SetOutput(w io.Writer) {
logger.SetOutput(w)
}
// Log output
// Log outputs log
func Log(prefix, message string) {
logger.Log(prefix, message)
}
// Logf output log with format
// Logf outputs log with format
func Logf(prefix, msg string, args ...interface{}) {
Log(prefix, fmt.Sprintf(msg, args...))
}

View file

@ -1,12 +1,41 @@
package logger
import "testing"
import (
"os"
"testing"
)
func TestLog(t *testing.T) {
Log("default", "shows this color")
Log("error", "shows this color")
Log("open", "shows this color")
Log("authorized", "shows this color")
Log("skip", "shows this color")
Log("git", "shows this color")
t.Run("with color", func(t *testing.T) {
t.Logf("NO_COLOR: %s", os.Getenv("NO_COLOR"))
SelectLogger()
// info
Log("default", "should be green")
// verbose
Log("git", "should be white")
Log("skip", "should be white")
// notice
Log("authorized", "should be blue")
// warn
Log("open", "should be yellow")
// error
Log("error", "should be red")
})
t.Run("without color", func(t *testing.T) {
t.Setenv("NO_COLOR", "true")
t.Logf("NO_COLOR: %s", os.Getenv("NO_COLOR"))
SelectLogger()
// info
Log("default", "should be none")
// verbose
Log("git", "should be none")
Log("skip", "should be none")
// notice
Log("authorized", "should be none")
// warn
Log("open", "should be none")
// error
Log("error", "should be none")
})
}