55 lines
1.3 KiB
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)
|
|
}
|
|
}
|