SimpleCloudNotifier/scnserver/init.go

96 lines
1.7 KiB
Go

package server
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gogs.mikescher.com/BlackForestBytes/goext/exerr"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
"os"
"path"
"path/filepath"
"runtime"
)
var callerRoot = ""
func init() {
_, file, _, ok := runtime.Caller(0)
if !ok {
return
}
callerRoot = path.Dir(file)
}
func Init(cfg Config) {
exerr.Init(exerr.ErrorPackageConfigInit{
ZeroLogErrTraces: langext.PTrue,
ZeroLogAllTraces: langext.PTrue,
RecursiveErrors: langext.PTrue,
ExtendedGinOutput: &cfg.ReturnRawErrors,
IncludeMetaInGinOutput: &cfg.ReturnRawErrors,
})
cw := zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: "2006-01-02 15:04:05 Z07:00",
FormatCaller: formatCaller,
}
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)
}
zerolog.SetGlobalLevel(cfg.LogLevel)
log.Debug().Msg("Initialized")
}
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)
}