add log level prefix color

This commit is contained in:
wanna
2021-06-28 00:00:44 +08:00
parent 5ef4ef61f0
commit 968e1db94d
5 changed files with 62 additions and 6 deletions

View File

@ -43,6 +43,7 @@ const (
defaultFilePerm = os.FileMode(0666)
defaultFileExpire = time.Minute
pathFilterKey = "/os/glog/glog"
bufferStdOut = "stdOut"
)
const (
@ -220,20 +221,19 @@ func (l *Logger) print(ctx context.Context, level int, values ...interface{}) {
// printToWriter writes buffer to writer.
func (l *Logger) printToWriter(ctx context.Context, input *HandlerInput) {
buffer := input.Buffer()
if l.config.Writer == nil {
// Output content to disk file.
if l.config.Path != "" {
l.printToFile(input.Time, buffer)
l.printToFile(input.Time, input.Buffer())
}
// Allow output to stdout?
if l.config.StdoutPrint {
if _, err := os.Stdout.Write(buffer.Bytes()); err != nil {
if _, err := os.Stdout.Write(input.Buffer(bufferStdOut).Bytes()); err != nil {
intlog.Error(err)
}
}
} else {
if _, err := l.config.Writer.Write(buffer.Bytes()); err != nil {
if _, err := l.config.Writer.Write(input.Buffer().Bytes()); err != nil {
// panic(err)
intlog.Error(err)
}

View File

@ -245,3 +245,14 @@ func (l *Logger) Async(enabled ...bool) *Logger {
}
return logger
}
func (l *Logger) Color(color logColor) *Logger {
logger := (*Logger)(nil)
if l.parent == nil {
logger = l.Clone()
} else {
logger = l
}
logger.SetColor(color)
return logger
}

View File

@ -42,6 +42,7 @@ type Config struct {
RotateBackupExpire time.Duration `json:"rotateBackupExpire"` // Max expire for rotated files, which is 0 in default, means no expiration.
RotateBackupCompress int `json:"rotateBackupCompress"` // Compress level for rotated files using gzip algorithm. It's 0 in default, means no compression.
RotateCheckInterval time.Duration `json:"rotateCheckInterval"` // Asynchronizely checks the backups and expiration at intervals. It's 1 hour in default.
color logColor `json:"-"`
}
// DefaultConfig returns the default configuration for logger.
@ -252,3 +253,7 @@ func (l *Logger) SetPrefix(prefix string) {
func (l *Logger) SetHandlers(handlers ...Handler) {
l.config.Handlers = append(handlers, defaultHandler)
}
func (l *Logger) SetColor(color logColor) {
l.config.color = color
}

View File

@ -9,6 +9,7 @@ package glog
import (
"bytes"
"context"
"fmt"
"time"
)
@ -42,11 +43,15 @@ func (i *HandlerInput) addStringToBuffer(buffer *bytes.Buffer, s string) {
buffer.WriteString(s)
}
func (i *HandlerInput) Buffer() *bytes.Buffer {
func (i *HandlerInput) Buffer(bufferType ...string) *bytes.Buffer {
buffer := bytes.NewBuffer(nil)
buffer.WriteString(i.TimeFormat)
if i.LevelFormat != "" {
i.addStringToBuffer(buffer, i.LevelFormat)
if len(bufferType) > 0 && bufferType[0] == bufferStdOut {
i.addStringToBuffer(buffer, i.getLevelFormatWithColor())
} else {
i.addStringToBuffer(buffer, i.LevelFormat)
}
}
if i.CallerFunc != "" {
i.addStringToBuffer(buffer, i.CallerFunc)
@ -67,6 +72,16 @@ func (i *HandlerInput) Buffer() *bytes.Buffer {
return buffer
}
// getLevelFormatWithColor returns the prefix string with color.
func (i *HandlerInput) getLevelFormatWithColor() string {
s := i.LevelFormat
color := defaultLevelColor[i.Level]
if i.logger.config.color != 0 {
color = i.logger.config.color
}
return fmt.Sprintf("\x1b[0;%dm%s\x1b[0m", color, s)
}
func (i *HandlerInput) String() string {
return i.Buffer().String()
}

View File

@ -29,6 +29,19 @@ const (
LEVEL_FATA // 1024
)
type logColor int
const (
COLOR_BLACK logColor = 30 + iota
COLOR_RED
COLOR_GREEN
COLOR_YELLOW
COLOR_BLUE
COLOR_MAGENTA
COLOR_CYAN
COLOR_WHITE
)
// defaultLevelPrefixes defines the default level and its mapping prefix string.
var defaultLevelPrefixes = map[int]string{
LEVEL_DEBU: "DEBU",
@ -41,6 +54,18 @@ var defaultLevelPrefixes = map[int]string{
LEVEL_FATA: "FATA",
}
// defaultLevelColor defines the default level and its mapping prefix string.
var defaultLevelColor = map[int]logColor{
LEVEL_DEBU: COLOR_YELLOW,
LEVEL_INFO: COLOR_GREEN,
LEVEL_NOTI: COLOR_CYAN,
LEVEL_WARN: COLOR_YELLOW,
LEVEL_ERRO: COLOR_RED,
LEVEL_CRIT: COLOR_RED,
LEVEL_PANI: COLOR_RED,
LEVEL_FATA: COLOR_RED,
}
// levelStringMap defines level string name to its level mapping.
var levelStringMap = map[string]int{
"ALL": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,