refine custom logger (#436)
This commit is contained in:
parent
c67e862fc9
commit
c23c0c2d0a
|
@ -1,3 +1,2 @@
|
|||
.idea
|
||||
.data
|
||||
cache/
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
abcd5
|
|
@ -1 +0,0 @@
|
|||
abcd2
|
|
@ -1 +0,0 @@
|
|||
content
|
|
@ -1 +0,0 @@
|
|||
content
|
|
@ -1 +0,0 @@
|
|||
content
|
|
@ -1 +0,0 @@
|
|||
content
|
|
@ -1 +0,0 @@
|
|||
hello world!222222
|
|
@ -1 +0,0 @@
|
|||
hello world!!@#$%^&&*()
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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, ","), ¶m.SubscribeCallback)
|
||||
return nil
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
package constant
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in New Issue