Browse Source

feat: show goroutine id in log

dev
Dnomd343 1 year ago
parent
commit
d6123a14e9
  1. 26
      next/logger/encoder.go
  2. 2
      next/logger/logger.go

26
next/logger/encoder.go

@ -1,12 +1,26 @@
package logger package logger
import ( import (
"bytes"
"fmt" "fmt"
"github.com/gookit/color" "github.com/gookit/color"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"runtime"
"strconv"
"time" "time"
) )
// getGID get goroutine ID only for debugging.
// -> https://blog.sgmansfield.com/2015/12/goroutine-ids/
func getGID() uint64 {
b := make([]byte, 64)
b = b[:runtime.Stack(b, false)]
b = bytes.TrimPrefix(b, []byte("goroutine "))
b = b[:bytes.IndexByte(b, ' ')]
n, _ := strconv.ParseUint(string(b), 10, 64)
return n
}
// timeEncoder formats the time as a string. // timeEncoder formats the time as a string.
func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05.000")) enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
@ -24,13 +38,25 @@ func timeColoredEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
// callerEncoder formats caller in square brackets. // callerEncoder formats caller in square brackets.
func callerEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { func callerEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
if !handle.gid {
enc.AppendString("[" + caller.TrimmedPath() + "]") enc.AppendString("[" + caller.TrimmedPath() + "]")
} else {
enc.AppendString(fmt.Sprintf("[%s] [%d]", caller.TrimmedPath(), getGID()))
}
} }
// callerColoredEncoder formats caller in square brackets // callerColoredEncoder formats caller in square brackets
// with magenta color. // with magenta color.
func callerColoredEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { func callerColoredEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
if !handle.gid {
enc.AppendString(color.Magenta.Render("[" + caller.TrimmedPath() + "]")) enc.AppendString(color.Magenta.Render("[" + caller.TrimmedPath() + "]"))
return
}
enc.AppendString(fmt.Sprintf(
"%s %s",
color.Magenta.Render("["+caller.TrimmedPath()+"]"),
color.Blue.Render(fmt.Sprintf("[%d]", getGID())),
))
} }
// levelEncoder formats log level using square brackets. // levelEncoder formats log level using square brackets.

2
next/logger/logger.go

@ -7,6 +7,7 @@ import (
) )
type Logger struct { type Logger struct {
gid bool
logger *zap.Logger logger *zap.Logger
level *zap.AtomicLevel level *zap.AtomicLevel
sugar *zap.SugaredLogger sugar *zap.SugaredLogger
@ -44,6 +45,7 @@ func init() {
) )
logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
handle = Logger{ handle = Logger{
gid: true,
logger: logger, logger: logger,
level: &level, level: &level,
sugar: logger.Sugar(), sugar: logger.Sugar(),

Loading…
Cancel
Save