improve package glog; fix issue in package gtrace (#1952)

This commit is contained in:
John Guo
2022-06-28 15:47:16 +08:00
committed by GitHub
parent f57d71b6fa
commit 2c169e2330
10 changed files with 98 additions and 26 deletions

View File

@ -31,12 +31,12 @@ type Registry struct {
kv etcd3.KV
lease etcd3.Lease
keepaliveTTL time.Duration
logger *glog.Logger
logger glog.ILogger
}
// Option is the option for the etcd registry.
type Option struct {
Logger *glog.Logger
Logger glog.ILogger
KeepaliveTTL time.Duration
}

View File

@ -177,16 +177,16 @@ func (s *Server) Start() error {
}
// Default session storage.
if s.config.SessionStorage == nil {
path := ""
sessionStoragePath := ""
if s.config.SessionPath != "" {
path = gfile.Join(s.config.SessionPath, s.config.Name)
if !gfile.Exists(path) {
if err := gfile.Mkdir(path); err != nil {
return gerror.Wrapf(err, `mkdir failed for "%s"`, path)
sessionStoragePath = gfile.Join(s.config.SessionPath, s.config.Name)
if !gfile.Exists(sessionStoragePath) {
if err := gfile.Mkdir(sessionStoragePath); err != nil {
return gerror.Wrapf(err, `mkdir failed for "%s"`, sessionStoragePath)
}
}
}
s.config.SessionStorage = gsession.NewStorageFile(path, s.config.SessionMaxAge)
s.config.SessionStorage = gsession.NewStorageFile(sessionStoragePath, s.config.SessionMaxAge)
}
// Initialize session manager when start running.
s.sessionManager = gsession.New(

View File

@ -150,13 +150,16 @@ func GetBaggageVar(ctx context.Context, key string) *gvar.Var {
func WithTraceID(ctx context.Context, traceID string) (context.Context, error) {
generatedTraceID, err := trace.TraceIDFromHex(traceID)
if err != nil {
return nil, gerror.WrapCodef(gcode.CodeInvalidParameter, err, `invalid traceID: %s`, traceID)
return ctx, gerror.WrapCodef(
gcode.CodeInvalidParameter,
err,
`invalid custom traceID "%s", a traceID string should be composed with [0-9a-z] and fixed length 32`,
traceID,
)
}
sc := trace.SpanContextFromContext(ctx)
if !sc.HasTraceID() {
var (
span trace.Span
)
var span trace.Span
ctx, span = NewSpan(ctx, "gtrace.WithTraceID")
defer span.End()
sc = trace.SpanContextFromContext(ctx)

View File

@ -0,0 +1,36 @@
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package gtrace_test
import (
"context"
"testing"
"github.com/gogf/gf/v2/net/gtrace"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/text/gstr"
)
func TestWithTraceID(t *testing.T) {
var (
ctx = context.Background()
requestId = `a323f910-f690-11ec-963d-79c0b7fcf119`
)
gtest.C(t, func(t *gtest.T) {
newCtx, err := gtrace.WithTraceID(ctx, requestId)
t.AssertNE(err, nil)
t.Assert(newCtx, ctx)
})
gtest.C(t, func(t *gtest.T) {
var traceId = gstr.Replace(requestId, "-", "")
newCtx, err := gtrace.WithTraceID(ctx, traceId)
t.AssertNil(err)
t.AssertNE(newCtx, ctx)
t.Assert(gtrace.GetTraceID(ctx), "")
t.Assert(gtrace.GetTraceID(newCtx), traceId)
})
}

View File

@ -28,12 +28,12 @@ var (
)
// SetLogger sets the logger for cron.
func SetLogger(logger *glog.Logger) {
func SetLogger(logger glog.ILogger) {
defaultCron.SetLogger(logger)
}
// GetLogger returns the logger in the cron.
func GetLogger() *glog.Logger {
func GetLogger() glog.ILogger {
return defaultCron.GetLogger()
}

View File

@ -21,7 +21,7 @@ type Cron struct {
idGen *gtype.Int64 // Used for unique name generation.
status *gtype.Int // Timed task status(0: Not Start; 1: Running; 2: Stopped; -1: Closed)
entries *gmap.StrAnyMap // All timed task entries.
logger *glog.Logger // Logger, it is nil in default.
logger glog.ILogger // Logger, it is nil in default.
}
// New returns a new Cron object with default settings.
@ -34,12 +34,12 @@ func New() *Cron {
}
// SetLogger sets the logger for cron.
func (c *Cron) SetLogger(logger *glog.Logger) {
func (c *Cron) SetLogger(logger glog.ILogger) {
c.logger = logger
}
// GetLogger returns the logger in the cron.
func (c *Cron) GetLogger() *glog.Logger {
func (c *Cron) GetLogger() glog.ILogger {
return c.logger
}

View File

@ -8,6 +8,7 @@ package gcron
import (
"context"
"fmt"
"reflect"
"runtime"
"time"
@ -19,6 +20,7 @@ import (
"github.com/gogf/gf/v2/util/gconv"
)
// JobFunc is the timing called job function in cron.
type JobFunc = gtimer.JobFunc
// Entry is timing task entry.
@ -140,7 +142,7 @@ func (entry *Entry) checkAndRun(ctx context.Context) {
return
case StatusClosed:
entry.logDebugf(ctx, "[gcron] %s %s removed", entry.schedule.pattern, entry.jobName)
entry.logDebugf(ctx, `cron job "%s" is removed`, entry.getJobNameWithPattern())
entry.Close()
case StatusReady:
@ -149,11 +151,11 @@ func (entry *Entry) checkAndRun(ctx context.Context) {
defer func() {
if exception := recover(); exception != nil {
entry.logErrorf(ctx,
"[gcron] %s %s end with error: %+v",
entry.schedule.pattern, entry.jobName, exception,
`cron job "%s(%s)" end with error: %+v`,
entry.jobName, entry.schedule.pattern, exception,
)
} else {
entry.logDebugf(ctx, "[gcron] %s %s end", entry.schedule.pattern, entry.jobName)
entry.logDebugf(ctx, `cron job "%s" ends`, entry.getJobNameWithPattern())
}
if entry.timerEntry.Status() == StatusClosed {
@ -170,13 +172,17 @@ func (entry *Entry) checkAndRun(ctx context.Context) {
}
}
}
entry.logDebugf(ctx, "[gcron] %s %s start", entry.schedule.pattern, entry.jobName)
entry.logDebugf(ctx, `cron job "%s" starts`, entry.getJobNameWithPattern())
entry.Job(ctx)
}
}
}
func (entry *Entry) getJobNameWithPattern() string {
return fmt.Sprintf(`%s(%s)`, entry.jobName, entry.schedule.pattern)
}
func (entry *Entry) logDebugf(ctx context.Context, format string, v ...interface{}) {
if logger := entry.cron.GetLogger(); logger != nil {
logger.Debugf(ctx, format, v...)

View File

@ -8,16 +8,43 @@
package glog
import (
"context"
"github.com/gogf/gf/v2/internal/command"
"github.com/gogf/gf/v2/os/grpool"
"github.com/gogf/gf/v2/util/gconv"
)
// ILogger is the API interface for logger.
type ILogger interface {
Print(ctx context.Context, v ...interface{})
Printf(ctx context.Context, format string, v ...interface{})
Debug(ctx context.Context, v ...interface{})
Debugf(ctx context.Context, format string, v ...interface{})
Info(ctx context.Context, v ...interface{})
Infof(ctx context.Context, format string, v ...interface{})
Notice(ctx context.Context, v ...interface{})
Noticef(ctx context.Context, format string, v ...interface{})
Warning(ctx context.Context, v ...interface{})
Warningf(ctx context.Context, format string, v ...interface{})
Error(ctx context.Context, v ...interface{})
Errorf(ctx context.Context, format string, v ...interface{})
Critical(ctx context.Context, v ...interface{})
Criticalf(ctx context.Context, format string, v ...interface{})
Panic(ctx context.Context, v ...interface{})
Panicf(ctx context.Context, format string, v ...interface{})
Fatal(ctx context.Context, v ...interface{})
Fatalf(ctx context.Context, format string, v ...interface{})
}
const (
commandEnvKeyForDebug = "gf.glog.debug"
)
var (
// Ensure Logger implements ILogger.
_ ILogger = &Logger{}
// Default logger object, for package method usage.
defaultLogger = New()

View File

@ -94,15 +94,15 @@ func (in *HandlerInput) getDefaultBuffer(withColor bool) *bytes.Buffer {
in.addStringToBuffer(buffer, levelStr)
}
}
if in.Prefix != "" {
in.addStringToBuffer(buffer, in.Prefix)
}
if in.TraceId != "" {
in.addStringToBuffer(buffer, "{"+in.TraceId+"}")
}
if in.CtxStr != "" {
in.addStringToBuffer(buffer, "{"+in.CtxStr+"}")
}
if in.Prefix != "" {
in.addStringToBuffer(buffer, in.Prefix)
}
if in.CallerFunc != "" {
in.addStringToBuffer(buffer, in.CallerFunc)
}

View File

@ -26,7 +26,7 @@ type Entry struct {
infinite *gtype.Bool // No times limit.
}
// JobFunc is the job function.
// JobFunc is the timing called job function in timer.
type JobFunc = func(ctx context.Context)
// Status returns the status of the job.