mirror of https://github.com/dnomd343/XProxy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.5 KiB
85 lines
2.5 KiB
package logger
|
|
|
|
import (
|
|
"github.com/gookit/color"
|
|
"github.com/petermattis/goid"
|
|
"go.uber.org/zap/zapcore"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// / getGid return goroutine id with string.
|
|
func getGid() string {
|
|
return strconv.FormatInt(goid.Get(), 10)
|
|
}
|
|
|
|
// getCaller calculate relative source path of caller.
|
|
func getCaller(ec zapcore.EntryCaller, verbose bool) string {
|
|
file, err := filepath.Rel(project, ec.File)
|
|
if err != nil {
|
|
return "unknown"
|
|
}
|
|
if verbose {
|
|
return file + ":" + strconv.Itoa(ec.Line)
|
|
}
|
|
file, _ = strings.CutSuffix(file, ".go") // remove `.go` suffix
|
|
return file
|
|
}
|
|
|
|
// timeEncoder formats the time as a string.
|
|
func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
|
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
|
|
}
|
|
|
|
// timeColoredEncoder formats the time as a colored string
|
|
// with custom prefix.
|
|
func timeColoredEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
|
enc.AppendString(color.Cyan.Render(logger.prefix))
|
|
enc.AppendString(color.Gray.Render(t.Format("2006-01-02 15:04:05.000")))
|
|
}
|
|
|
|
// callerEncoder formats caller in square brackets.
|
|
func callerEncoder(ec zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
|
|
if logger.verbose {
|
|
enc.AppendString("[" + getGid() + "]")
|
|
enc.AppendString("[" + getCaller(ec, true) + "]")
|
|
} else {
|
|
enc.AppendString("[" + getCaller(ec, false) + "]")
|
|
}
|
|
}
|
|
|
|
// callerColoredEncoder formats caller in square brackets with magenta color.
|
|
func callerColoredEncoder(ec zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
|
|
if logger.verbose {
|
|
enc.AppendString(color.Blue.Render("[" + getGid() + "]"))
|
|
enc.AppendString(color.Magenta.Render("[" + getCaller(ec, true) + "]"))
|
|
} else {
|
|
enc.AppendString(color.Magenta.Render("[" + getCaller(ec, false) + "]"))
|
|
}
|
|
}
|
|
|
|
// levelEncoder formats log level using square brackets.
|
|
func levelEncoder(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
|
enc.AppendString("[" + level.CapitalString() + "]")
|
|
}
|
|
|
|
// levelColoredEncoder formats log level using square brackets and uses
|
|
// different colors.
|
|
func levelColoredEncoder(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
|
levelStr := "[" + level.CapitalString() + "]"
|
|
switch level {
|
|
case zapcore.DebugLevel:
|
|
levelStr = color.FgDefault.Render(levelStr)
|
|
case zapcore.InfoLevel:
|
|
levelStr = color.Green.Render(levelStr)
|
|
case zapcore.WarnLevel:
|
|
levelStr = color.Yellow.Render(levelStr)
|
|
case zapcore.ErrorLevel:
|
|
levelStr = color.Red.Render(levelStr)
|
|
case zapcore.PanicLevel:
|
|
levelStr = color.LightRed.Render(levelStr)
|
|
}
|
|
enc.AppendString(levelStr)
|
|
}
|
|
|