1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-06-18 22:17:44 +02:00

feat(logger): add logger option to all micro components (override DefaultLogger) closes #2556 (#2559)

* feat(logger): add logger option to all components

* fix: refactor api/rpc.go

* fix: refactor api/stream.go

* fix: api/options.go comment

* fix(logger): do not use logger.Helper internally

* fix(logger): fix comments

* fix(logger): use level.Enabled method

* fix: rename mlogger to log

* fix: run go fmt

* fix: log level

* fix: factories

Co-authored-by: Mohamed MHAMDI <mmhamdi@hubside.com>
Co-authored-by: Davincible <david.brouwer.99@gmail.com>
This commit is contained in:
Mohamed MHAMDI
2022-09-29 16:44:53 +02:00
committed by GitHub
parent 57a0ef5a0f
commit 1db36357d5
63 changed files with 818 additions and 673 deletions

View File

@ -15,7 +15,8 @@ import (
"go-micro.dev/v4/broker"
"go-micro.dev/v4/codec"
raw "go-micro.dev/v4/codec/bytes"
"go-micro.dev/v4/logger"
log "go-micro.dev/v4/logger"
"go-micro.dev/v4/metadata"
"go-micro.dev/v4/registry"
"go-micro.dev/v4/transport"
@ -131,6 +132,7 @@ func (s *rpcServer) HandleEvent(e broker.Event) error {
// ServeConn serves a single connection
func (s *rpcServer) ServeConn(sock transport.Socket) {
logger := s.opts.Logger
// global error tracking
var gerr error
// streams are multiplexed on Micro-Stream or Micro-Id header
@ -161,10 +163,8 @@ func (s *rpcServer) ServeConn(sock transport.Socket) {
// recover any panics
if r := recover(); r != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error("panic recovered: ", r)
logger.Error(string(debug.Stack()))
}
logger.Log(log.ErrorLevel, "panic recovered: ", r)
logger.Log(log.ErrorLevel, string(debug.Stack()))
}
}()
@ -227,7 +227,7 @@ func (s *rpcServer) ServeConn(sock transport.Socket) {
if !ok && stream {
// check if its a last stream EOS error
err := msg.Header["Micro-Error"]
if err == lastStreamResponseError.Error() {
if err == errLastStreamResponse.Error() {
pool.Release(psock)
continue
}
@ -383,10 +383,8 @@ func (s *rpcServer) ServeConn(sock transport.Socket) {
// recover any panics for outbound process
if r := recover(); r != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error("panic recovered: ", r)
logger.Error(string(debug.Stack()))
}
logger.Log(log.ErrorLevel, "panic recovered: ", r)
logger.Log(log.ErrorLevel, string(debug.Stack()))
}
}()
@ -414,8 +412,8 @@ func (s *rpcServer) ServeConn(sock transport.Socket) {
// recover any panics for call handler
if r := recover(); r != nil {
logger.Error("panic recovered: ", r)
logger.Error(string(debug.Stack()))
logger.Log(log.ErrorLevel, "panic recovered: ", r)
logger.Log(log.ErrorLevel, string(debug.Stack()))
}
}()
@ -430,11 +428,11 @@ func (s *rpcServer) ServeConn(sock transport.Socket) {
// if the server request is an EOS error we let the socket know
// sometimes the socket is already closed on the other side, so we can ignore that error
alreadyClosed := serveRequestError == lastStreamResponseError && writeError == io.EOF
alreadyClosed := serveRequestError == errLastStreamResponse && writeError == io.EOF
// could not write error response
if writeError != nil && !alreadyClosed {
logger.Debugf("rpc: unable to write error response: %v", writeError)
logger.Logf(log.DebugLevel, "rpc: unable to write error response: %v", writeError)
}
}
}(id, psock)
@ -517,7 +515,7 @@ func (s *rpcServer) Register() error {
rsvc := s.rsvc
config := s.Options()
s.RUnlock()
logger := s.opts.Logger
regFunc := func(service *registry.Service) error {
// create registry options
rOpts := []registry.RegisterOption{registry.RegisterTTL(config.RegisterTTL)}
@ -650,9 +648,7 @@ func (s *rpcServer) Register() error {
s.RUnlock()
if !registered {
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Registry [%s] Registering node: %s", config.Registry.String(), node.Id)
}
logger.Logf(log.InfoLevel, "Registry [%s] Registering node: %s", config.Registry.String(), node.Id)
}
// register the service
@ -702,9 +698,7 @@ func (s *rpcServer) Register() error {
if err != nil {
return err
}
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Subscribing to topic: %s", sub.Topic())
}
logger.Logf(log.InfoLevel, "Subscribing to topic: %s", sub.Topic())
s.subscribers[sb] = []broker.Subscriber{sub}
}
if cacheService {
@ -718,7 +712,7 @@ func (s *rpcServer) Register() error {
func (s *rpcServer) Deregister() error {
var err error
var advt, host, port string
logger := s.opts.Logger
s.RLock()
config := s.Options()
s.RUnlock()
@ -763,9 +757,7 @@ func (s *rpcServer) Deregister() error {
Nodes: []*registry.Node{node},
}
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Registry [%s] Deregistering node: %s", config.Registry.String(), node.Id)
}
logger.Logf(log.InfoLevel, "Registry [%s] Deregistering node: %s", config.Registry.String(), node.Id)
if err := config.Registry.Deregister(service); err != nil {
return err
}
@ -788,9 +780,7 @@ func (s *rpcServer) Deregister() error {
for sb, subs := range s.subscribers {
for _, sub := range subs {
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Unsubscribing %s from topic: %s", node.Id, sub.Topic())
}
logger.Logf(log.InfoLevel, "Unsubscribing %s from topic: %s", node.Id, sub.Topic())
sub.Unsubscribe()
}
s.subscribers[sb] = nil
@ -807,7 +797,7 @@ func (s *rpcServer) Start() error {
return nil
}
s.RUnlock()
logger := s.opts.Logger
config := s.Options()
// start listening on the transport
@ -816,9 +806,7 @@ func (s *rpcServer) Start() error {
return err
}
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Transport [%s] Listening on %s", config.Transport.String(), ts.Addr())
}
logger.Logf(log.InfoLevel, "Transport [%s] Listening on %s", config.Transport.String(), ts.Addr())
// swap address
s.Lock()
@ -830,27 +818,19 @@ func (s *rpcServer) Start() error {
// connect to the broker
if err := config.Broker.Connect(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Broker [%s] connect error: %v", bname, err)
}
logger.Logf(log.ErrorLevel, "Broker [%s] connect error: %v", bname, err)
return err
}
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Broker [%s] Connected to %s", bname, config.Broker.Address())
}
logger.Logf(log.InfoLevel, "Broker [%s] Connected to %s", bname, config.Broker.Address())
// use RegisterCheck func before register
if err = s.opts.RegisterCheck(s.opts.Context); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s register check error: %s", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s register check error: %s", config.Name, config.Id, err)
} else {
// announce self to the world
if err = s.Register(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s register error: %s", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s register error: %s", config.Name, config.Id, err)
}
}
@ -871,9 +851,7 @@ func (s *rpcServer) Start() error {
// check the error and backoff
default:
if err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Accept error: %v", err)
}
logger.Logf(log.ErrorLevel, "Accept error: %v", err)
time.Sleep(time.Second)
continue
}
@ -906,25 +884,17 @@ func (s *rpcServer) Start() error {
s.RUnlock()
rerr := s.opts.RegisterCheck(s.opts.Context)
if rerr != nil && registered {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s register check error: %s, deregister it", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s register check error: %s, deregister it", config.Name, config.Id, err)
// deregister self in case of error
if err := s.Deregister(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s deregister error: %s", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s deregister error: %s", config.Name, config.Id, err)
}
} else if rerr != nil && !registered {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s register check error: %s", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s register check error: %s", config.Name, config.Id, err)
continue
}
if err := s.Register(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s register error: %s", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s register error: %s", config.Name, config.Id, err)
}
// wait for exit
case ch = <-s.exit:
@ -940,9 +910,7 @@ func (s *rpcServer) Start() error {
if registered {
// deregister self
if err := s.Deregister(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Server %s-%s deregister error: %s", config.Name, config.Id, err)
}
logger.Logf(log.ErrorLevel, "Server %s-%s deregister error: %s", config.Name, config.Id, err)
}
}
@ -958,14 +926,10 @@ func (s *rpcServer) Start() error {
// close transport listener
ch <- ts.Close()
if logger.V(logger.InfoLevel, logger.DefaultLogger) {
logger.Infof("Broker [%s] Disconnected from %s", bname, config.Broker.Address())
}
logger.Logf(log.InfoLevel, "Broker [%s] Disconnected from %s", bname, config.Broker.Address())
// disconnect the broker
if err := config.Broker.Disconnect(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Errorf("Broker [%s] Disconnect error: %v", bname, err)
}
logger.Logf(log.ErrorLevel, "Broker [%s] Disconnect error: %v", bname, err)
}
// swap back address