mirror of
https://gitee.com/johng/gf
synced 2026-06-06 02:25:47 +08:00
improve package glog; fix issue in package gtrace (#1952)
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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)
|
||||
|
||||
36
net/gtrace/gtrace_z_unit_test.go
Normal file
36
net/gtrace/gtrace_z_unit_test.go
Normal 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)
|
||||
})
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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...)
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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.
|
||||
|
||||
Reference in New Issue
Block a user