refine custom logger (#436)

This commit is contained in:
binbin.zhang 2022-04-06 18:57:27 +08:00 committed by GitHub
parent c67e862fc9
commit c23c0c2d0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 52 additions and 52 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
.idea
.data
cache/

View File

@ -1 +0,0 @@
abcd5

View File

@ -1 +0,0 @@
abcd2

View File

@ -1 +0,0 @@
hello world!222222

View File

@ -1 +0,0 @@
hello world!!@#$%^&&*()

View File

@ -102,11 +102,11 @@ func NewConfigClient(nc nacos_client.INacosClient) (*ConfigClient, error) {
LogDir: clientConfig.LogDir,
CustomLogger: clientConfig.CustomLogger,
}
err = logger.InitLogger(logger.BuildLoggerConfig(loggerConfig))
err = logger.InitLogger(loggerConfig)
if err != nil {
return config, err
}
logger.GetLogger().Infof("logDir:<%s> cacheDir:<%s>", clientConfig.LogDir, clientConfig.CacheDir)
config.configCacheDir = clientConfig.CacheDir + string(os.PathSeparator) + "config"
config.configProxy, err = NewConfigProxy(serverConfig, clientConfig, httpAgent)
if clientConfig.OpenKMS {
@ -116,7 +116,6 @@ func NewConfigClient(nc nacos_client.INacosClient) (*ConfigClient, error) {
}
config.kmsClient = kmsClient
}
logger.GetLogger().Infof("logDir:<%s> cacheDir:<%s>", clientConfig.LogDir, clientConfig.CacheDir)
return config, err
}

View File

@ -75,10 +75,11 @@ func NewNamingClient(nc nacos_client.INacosClient) (NamingClient, error) {
LogDir: clientConfig.LogDir,
CustomLogger: clientConfig.CustomLogger,
}
err = logger.InitLogger(logger.BuildLoggerConfig(loggerConfig))
err = logger.InitLogger(loggerConfig)
if err != nil {
return naming, err
}
logger.GetLogger().Infof("logDir:<%s> cacheDir:<%s>", clientConfig.LogDir, clientConfig.CacheDir)
naming.subCallback = NewSubscribeCallback()
naming.serviceProxy, err = NewNamingProxy(clientConfig, serverConfig, httpAgent)
if err != nil {
@ -88,11 +89,10 @@ func NewNamingClient(nc nacos_client.INacosClient) (NamingClient, error) {
clientConfig.UpdateThreadNum, clientConfig.NotLoadCacheAtStart, naming.subCallback, clientConfig.UpdateCacheWhenEmpty)
naming.beatReactor = NewBeatReactor(naming.serviceProxy, clientConfig.BeatInterval)
naming.indexMap = cache.NewConcurrentMap()
return naming, nil
}
// 注册服务实例
//RegisterInstance register instance
func (sc *NamingClient) RegisterInstance(param vo.RegisterInstanceParam) (bool, error) {
if param.ServiceName == "" {
return false, errors.New("serviceName cannot be empty!")
@ -134,7 +134,7 @@ func (sc *NamingClient) RegisterInstance(param vo.RegisterInstanceParam) (bool,
}
// 注销服务实例
//DeregisterInstance deregister instance
func (sc *NamingClient) DeregisterInstance(param vo.DeregisterInstanceParam) (bool, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -148,7 +148,7 @@ func (sc *NamingClient) DeregisterInstance(param vo.DeregisterInstanceParam) (bo
return true, nil
}
// UpdateInstance Update information for exist instance.
//UpdateInstance update information for exist instance.
func (sc *NamingClient) UpdateInstance(param vo.UpdateInstanceParam) (bool, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -182,7 +182,7 @@ func (sc *NamingClient) UpdateInstance(param vo.UpdateInstanceParam) (bool, erro
return true, nil
}
// 获取服务列表
//GetService get service info
func (sc *NamingClient) GetService(param vo.GetServiceParam) (model.Service, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -191,6 +191,7 @@ func (sc *NamingClient) GetService(param vo.GetServiceParam) (model.Service, err
return service, err
}
//GetAllServicesInfo get all services info
func (sc *NamingClient) GetAllServicesInfo(param vo.GetAllServiceInfoParam) (model.ServiceList, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -212,6 +213,7 @@ func (sc *NamingClient) GetAllServicesInfo(param vo.GetAllServiceInfoParam) (mod
return services, nil
}
//SelectAllInstances select all instances
func (sc *NamingClient) SelectAllInstances(param vo.SelectAllInstancesParam) ([]model.Instance, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -223,6 +225,7 @@ func (sc *NamingClient) SelectAllInstances(param vo.SelectAllInstancesParam) ([]
return service.Hosts, err
}
//SelectInstances select instances
func (sc *NamingClient) SelectInstances(param vo.SelectInstancesParam) ([]model.Instance, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -248,6 +251,7 @@ func (sc *NamingClient) selectInstances(service model.Service, healthy bool) ([]
return result, nil
}
//SelectOneHealthyInstance select one healthy instance
func (sc *NamingClient) SelectOneHealthyInstance(param vo.SelectOneHealthInstanceParam) (*model.Instance, error) {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -316,7 +320,7 @@ func (chs Chooser) pick() model.Instance {
return chs.data[i]
}
// 服务监听
//Subscribe subscibe service
func (sc *NamingClient) Subscribe(param *vo.SubscribeParam) error {
if len(param.GroupName) == 0 {
param.GroupName = constant.DEFAULT_GROUP
@ -338,7 +342,7 @@ func (sc *NamingClient) Subscribe(param *vo.SubscribeParam) error {
return nil
}
// 取消服务监听
//Unsubscribe unsubscribe service
func (sc *NamingClient) Unsubscribe(param *vo.SubscribeParam) error {
sc.subCallback.RemoveCallbackFuncs(util.GetGroupName(param.ServiceName, param.GroupName), strings.Join(param.Clusters, ","), &param.SubscribeCallback)
return nil

View File

@ -17,11 +17,12 @@
package constant
import (
"os"
"time"
"github.com/nacos-group/nacos-sdk-go/common/file"
"github.com/nacos-group/nacos-sdk-go/common/logger"
"gopkg.in/natefinch/lumberjack.v2"
"os"
"time"
)
func NewClientConfig(opts ...ClientOption) *ClientConfig {

View File

@ -51,5 +51,5 @@ type ClientConfig struct {
LogSampling *logger.SamplingConfig // the sampling config of log
ContextPath string // the nacos server contextpath
LogRollingConfig *lumberjack.Logger // the log rolling config
CustomLogger logger.Logger // a log interface implementation
CustomLogger logger.Logger // the custom log interface ,With a custom Logger (nacos sdk will not provide log cutting and archiving capabilities)
}

View File

@ -1 +0,0 @@
package constant

View File

@ -21,10 +21,9 @@ import (
"sync"
"time"
"gopkg.in/natefinch/lumberjack.v2"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var (
@ -71,44 +70,46 @@ type Logger interface {
Debugf(fmt string, args ...interface{})
}
func BuildLoggerConfig(clientConfig Config) Config {
if clientConfig.CustomLogger == nil {
clientConfig.LogRollingConfig = &lumberjack.Logger{
Filename: clientConfig.LogDir + string(os.PathSeparator) + clientConfig.LogFileName,
}
logRollingConfig := clientConfig.LogRollingConfig
if logRollingConfig != nil {
clientConfig.LogRollingConfig.MaxSize = logRollingConfig.MaxSize
clientConfig.LogRollingConfig.MaxAge = logRollingConfig.MaxAge
clientConfig.LogRollingConfig.MaxBackups = logRollingConfig.MaxBackups
clientConfig.LogRollingConfig.LocalTime = logRollingConfig.LocalTime
clientConfig.LogRollingConfig.Compress = logRollingConfig.Compress
}
func init() {
zapLoggerConfig := zap.NewDevelopmentConfig()
zapLoggerEncoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "message",
StacktraceKey: "stacktrace",
EncodeLevel: zapcore.CapitalColorLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
return clientConfig
zapLoggerConfig.EncoderConfig = zapLoggerEncoderConfig
defaultLogger, _ := zapLoggerConfig.Build(zap.AddCaller(), zap.AddCallerSkip(1))
setLogger(&NacosLogger{defaultLogger.Sugar()})
}
// InitLogger is init global logger for nacos
func InitLogger(config Config) (err error) {
logLock.Lock()
defer logLock.Unlock()
logger, err = InitNacosLogger(config)
logger, err = initNacosLogger(config)
if err != nil {
return err
}
setLogger(logger)
return
}
// InitNacosLogger is init nacos default logger
func InitNacosLogger(config Config) (Logger, error) {
func initNacosLogger(config Config) (Logger, error) {
if config.CustomLogger != nil {
return &NacosLogger{config.CustomLogger}, nil
}
logLevel := getLogLevel(config.Level)
encoder := getEncoder()
writer := config.getLogWriter()
core := zapcore.NewCore(zapcore.NewConsoleEncoder(encoder), zapcore.NewMultiWriteSyncer(writer, zapcore.AddSync(os.Stdout)), logLevel)
if config.Sampling != nil {
core = zapcore.NewSamplerWithOptions(core, config.Sampling.Tick, config.Sampling.Initial, config.Sampling.Thereafter)
}
@ -140,7 +141,7 @@ func getEncoder() zapcore.EncoderConfig {
}
//SetLogger sets logger for sdk
func SetLogger(log Logger) {
func setLogger(log Logger) {
logLock.Lock()
defer logLock.Unlock()
logger = log
@ -154,5 +155,9 @@ func GetLogger() Logger {
// getLogWriter get Lumberjack writer by LumberjackConfig
func (c *Config) getLogWriter() zapcore.WriteSyncer {
if c.LogRollingConfig == nil {
c.LogRollingConfig = &lumberjack.Logger{}
}
c.LogRollingConfig.Filename = c.LogDir + string(os.PathSeparator) + c.LogFileName
return zapcore.AddSync(c.LogRollingConfig)
}

View File

@ -24,7 +24,7 @@ import (
)
func reset() {
SetLogger(nil)
setLogger(nil)
}
func TestInitLogger(t *testing.T) {
@ -59,7 +59,7 @@ func TestSetLogger(t *testing.T) {
// not yet init get default log
log := GetLogger()
log1 := &mockLogger{}
SetLogger(log1)
setLogger(log1)
// after set logger
log2 := GetLogger()
@ -82,7 +82,7 @@ func TestRaceLogger(t *testing.T) {
wg.Add(3)
go func() {
defer wg.Done()
SetLogger(&mockLogger{})
setLogger(&mockLogger{})
}()
go func() {
defer wg.Done()

View File

@ -18,13 +18,14 @@ package main
import (
"fmt"
"time"
"github.com/nacos-group/nacos-sdk-go/clients"
"github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/model"
"github.com/nacos-group/nacos-sdk-go/util"
"github.com/nacos-group/nacos-sdk-go/vo"
"gopkg.in/natefinch/lumberjack.v2"
"time"
)
func main() {