83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/sirupsen/logrus"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func LogSetup(mode, lvl string) {
|
|
l, err := logrus.ParseLevel(lvl)
|
|
if err != nil {
|
|
l = logrus.InfoLevel
|
|
}
|
|
|
|
logrus.SetLevel(l)
|
|
|
|
switch mode {
|
|
case "release":
|
|
case "dev":
|
|
{
|
|
logrus.SetReportCaller(true)
|
|
logrus.SetFormatter(&CustomFormatter{})
|
|
logrus.SetOutput(os.Stdout)
|
|
}
|
|
}
|
|
}
|
|
|
|
type CustomFormatter struct{}
|
|
|
|
func (f *CustomFormatter) Format(entry *logrus.Entry) ([]byte, error) {
|
|
timestamp := entry.Time.Format("2006-01-02 15:04:05")
|
|
level := strings.ToUpper(entry.Level.String())
|
|
msg := entry.Message
|
|
|
|
file := ""
|
|
line := 0
|
|
if entry.Caller != nil {
|
|
file = filepath.Base(entry.Caller.File)
|
|
line = entry.Caller.Line
|
|
}
|
|
|
|
colorCode := f.getLevelColor(entry.Level)
|
|
resetCode := "\033[0m"
|
|
coloredLevel := fmt.Sprintf("%s[%s]%s", colorCode, level, resetCode)
|
|
|
|
errVal := entry.Data["error"]
|
|
if errVal == nil {
|
|
errVal = "\n"
|
|
} else {
|
|
errVal = fmt.Sprintf("---%v\n\n", errVal)
|
|
}
|
|
|
|
cyanCode := f.getLevelColor(logrus.TraceLevel)
|
|
filename := fmt.Sprintf("%s[%s:%d]%s", cyanCode, file, line, resetCode)
|
|
|
|
logLine := fmt.Sprintf("%s[%s]%v %s\n%v",
|
|
coloredLevel, timestamp, filename, msg, errVal)
|
|
|
|
return []byte(logLine), nil
|
|
}
|
|
|
|
func (f *CustomFormatter) getLevelColor(level logrus.Level) string {
|
|
switch level {
|
|
case logrus.PanicLevel:
|
|
return "\033[35m" // Magenta
|
|
case logrus.FatalLevel:
|
|
return "\033[35m" // Magenta
|
|
case logrus.ErrorLevel:
|
|
return "\033[31m" // Red
|
|
case logrus.WarnLevel:
|
|
return "\033[33m" // Yellow
|
|
case logrus.InfoLevel:
|
|
return "\033[32m" // Green
|
|
case logrus.DebugLevel:
|
|
return "\033[34m" // Blue
|
|
case logrus.TraceLevel:
|
|
return "\033[36m" // Cyan
|
|
default:
|
|
return "\033[0m" // No color
|
|
}
|
|
}
|