cherry-pick caller logprint fix from psycho-backend
This commit is contained in:
parent
e737cd9d5c
commit
acd7de0dee
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#### BEFORE RELEASE
|
#### BEFORE RELEASE
|
||||||
|
|
||||||
- tests (!)
|
- finish tests (!)
|
||||||
|
|
||||||
- migration script for existing data
|
- migration script for existing data
|
||||||
|
|
||||||
@ -18,16 +18,21 @@
|
|||||||
|
|
||||||
- diff my currently used scnsend script vs the one in the docs here
|
- diff my currently used scnsend script vs the one in the docs here
|
||||||
|
|
||||||
- (?) use str-ids (also prevents wrong-joins) -> see psycho
|
- (?) use str-ids (hide counts and prevents wrong-joins) -> see psycho
|
||||||
-> how does it work with existing data? (do i care, there are only 2 active users... (are there?))
|
-> 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,
|
- error logging as goroutine, gets all errors via channel,
|
||||||
(channel buffered - nonblocking send, second channel that gets a message when sender failed )
|
(channel buffered - nonblocking send, second channel that gets a message when sender failed )
|
||||||
(then all errors end up in _second_ sqlite table)
|
(then all errors end up in _second_ sqlite table)
|
||||||
due to message channel etc everything is non blocking and cant fail in main
|
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...
|
- 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)
|
-> logs and request-logging into their own sqlite files (sqlite-files are prepped)
|
||||||
|
@ -1,16 +1,32 @@
|
|||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"os"
|
"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) {
|
func Init(cfg Config) {
|
||||||
cw := zerolog.ConsoleWriter{
|
cw := zerolog.ConsoleWriter{
|
||||||
Out: os.Stdout,
|
Out: os.Stdout,
|
||||||
TimeFormat: "2006-01-02 15:04:05 Z07:00",
|
TimeFormat: "2006-01-02 15:04:05 Z07:00",
|
||||||
|
FormatCaller: formatCaller,
|
||||||
}
|
}
|
||||||
|
|
||||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
||||||
@ -32,3 +48,38 @@ func Init(cfg Config) {
|
|||||||
|
|
||||||
log.Debug().Msg("Initialized")
|
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)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user