cherry-pick caller logprint fix from psycho-backend

This commit is contained in:
Mike Schwörer 2023-01-13 17:51:55 +01:00
parent e737cd9d5c
commit acd7de0dee
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
2 changed files with 63 additions and 7 deletions

View File

@ -6,7 +6,7 @@
#### BEFORE RELEASE
- tests (!)
- finish tests (!)
- migration script for existing data
@ -18,16 +18,21 @@
- diff my currently used scnsend script vs the one in the docs here
- (?) use str-ids (also prevents wrong-joins) -> see psycho
-> how does it work with existing data? (do i care, there are only 2 active users... (are there?))
- (?) use str-ids (hide counts and prevents wrong-joins) -> see psycho
-> ensre that all queries that return multiple are properly ordered
-> how does it work with existing data?
-> do i care, there are only 2 active users... (are there?)
- error logging as goroutine, gets all errors via channel,
(channel buffered - nonblocking send, second channel that gets a message when sender failed )
(then all errors end up in _second_ sqlite table)
due to message channel etc everything is non blocking and cant fail in main
- request logging (log all requests with body response, exitcode, headers, uri, route, userid, ..., tx-retries, etc), (trim body/response if too big?)
- => implement proper error logging in goext, kinda combines zerolog and wrapped-errors
copy basic code from bringman, but remove all bm specific stuff and make it abstract
Register(ErrType) methods, errtypes then as structs
log.xxx package with same interface as zerolog
- jobs to clear requests-db and logs-db after to only keep X entries...
-> logs and request-logging into their own sqlite files (sqlite-files are prepped)

View File

@ -1,16 +1,32 @@
package server
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"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) {
cw := zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: "2006-01-02 15:04:05 Z07:00",
Out: os.Stdout,
TimeFormat: "2006-01-02 15:04:05 Z07:00",
FormatCaller: formatCaller,
}
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
@ -32,3 +48,38 @@ func Init(cfg Config) {
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)
}