2022-12-20 13:55:09 +01:00
|
|
|
package server
|
2022-11-13 19:17:07 +01:00
|
|
|
|
|
|
|
import (
|
2023-01-13 17:51:55 +01:00
|
|
|
"fmt"
|
2022-11-13 19:17:07 +01:00
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/rs/zerolog"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
|
|
"os"
|
2023-01-13 17:51:55 +01:00
|
|
|
"path"
|
|
|
|
"path/filepath"
|
|
|
|
"runtime"
|
2022-11-13 19:17:07 +01:00
|
|
|
)
|
|
|
|
|
2023-01-13 17:51:55 +01:00
|
|
|
var callerRoot = ""
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
_, file, _, ok := runtime.Caller(0)
|
|
|
|
if !ok {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
callerRoot = path.Dir(file)
|
|
|
|
}
|
|
|
|
|
2022-12-20 13:55:09 +01:00
|
|
|
func Init(cfg Config) {
|
2022-11-13 19:17:07 +01:00
|
|
|
cw := zerolog.ConsoleWriter{
|
2023-01-13 17:51:55 +01:00
|
|
|
Out: os.Stdout,
|
|
|
|
TimeFormat: "2006-01-02 15:04:05 Z07:00",
|
|
|
|
FormatCaller: formatCaller,
|
2022-11-13 19:17:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
|
|
|
multi := zerolog.MultiLevelWriter(cw)
|
|
|
|
logger := zerolog.New(multi).With().
|
|
|
|
Timestamp().
|
|
|
|
Caller().
|
|
|
|
Logger()
|
|
|
|
|
|
|
|
log.Logger = logger
|
|
|
|
|
|
|
|
if cfg.GinDebug {
|
|
|
|
gin.SetMode(gin.DebugMode)
|
|
|
|
} else {
|
|
|
|
gin.SetMode(gin.ReleaseMode)
|
|
|
|
}
|
|
|
|
|
2022-12-07 22:11:44 +01:00
|
|
|
zerolog.SetGlobalLevel(cfg.LogLevel)
|
|
|
|
|
2022-11-13 19:17:07 +01:00
|
|
|
log.Debug().Msg("Initialized")
|
|
|
|
}
|
2023-01-13 17:51:55 +01:00
|
|
|
|
|
|
|
func formatCaller(i any) string {
|
|
|
|
const (
|
|
|
|
colorBlack = iota + 30
|
|
|
|
colorRed
|
|
|
|
colorGreen
|
|
|
|
colorYellow
|
|
|
|
colorBlue
|
|
|
|
colorMagenta
|
|
|
|
colorCyan
|
|
|
|
colorWhite
|
|
|
|
|
|
|
|
colorBold = 1
|
|
|
|
colorDarkGray = 90
|
|
|
|
)
|
|
|
|
|
|
|
|
var c string
|
|
|
|
if cc, ok := i.(string); ok {
|
|
|
|
c = cc
|
|
|
|
}
|
|
|
|
if len(c) > 0 {
|
|
|
|
if rel, err := filepath.Rel(callerRoot, c); err == nil {
|
|
|
|
c = rel
|
|
|
|
}
|
|
|
|
c = colorize(c, colorBold, false) + colorize(" >", colorCyan, false)
|
|
|
|
}
|
|
|
|
return c
|
|
|
|
}
|
|
|
|
|
|
|
|
func colorize(s interface{}, c int, disabled bool) string {
|
|
|
|
if disabled {
|
|
|
|
return fmt.Sprintf("%s", s)
|
|
|
|
}
|
|
|
|
return fmt.Sprintf("\x1b[%dm%v\x1b[0m", c, s)
|
|
|
|
}
|