FrontInterfaceCenter/internal/pkg/log/business.go

55 lines
1.3 KiB
Go

package log
import (
"center-api/internal/conf"
"center-api/internal/pkg/helper"
"context"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/middleware/tracing"
"os"
"strings"
"sync"
)
var businessLogger log.Logger
var businessLoggerOnce sync.Once
// NewBusinessLogger 获取业务日志logger
func NewBusinessLogger(c *conf.Bootstrap, id, name, version string) log.Logger {
//默认的业务 logger
businessLoggerOnce.Do(func() {
filePath := ""
if c.Logs != nil {
filePath = strings.Trim(c.Logs.Business, " ")
}
writeIO := os.Stdout
if filePath != "" {
f, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic("打开日志失败,注意读写权限:" + filePath)
}
writeIO = f
}
businessLogger = log.With(log.NewStdLogger(writeIO),
"ts", log.DefaultTimestamp,
"caller", log.DefaultCaller,
"service.id", id,
"service.name", name,
"service.version", version,
"trace.id", tracing.TraceID(),
"span.id", tracing.SpanID(),
"user.id", getLogTraceUserId(),
)
})
return businessLogger
}
// GetLogTraceUserId 获取日志中跟踪的用户 id
func getLogTraceUserId() log.Valuer {
return func(ctx context.Context) interface{} {
return helper.GetLoginUserId(ctx)
}
}