github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/gossip/util/logging.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package util
     8  
     9  import (
    10  	"sync"
    11  
    12  	"github.com/hechain20/hechain/common/flogging"
    13  	"go.uber.org/zap/zapcore"
    14  )
    15  
    16  // Logger names for logger initialization.
    17  const (
    18  	ChannelLogger     = "gossip.channel"
    19  	CommLogger        = "gossip.comm"
    20  	DiscoveryLogger   = "gossip.discovery"
    21  	ElectionLogger    = "gossip.election"
    22  	GossipLogger      = "gossip.gossip"
    23  	CommMockLogger    = "gossip.comm.mock"
    24  	PullLogger        = "gossip.pull"
    25  	ServiceLogger     = "gossip.service"
    26  	StateLogger       = "gossip.state"
    27  	PrivateDataLogger = "gossip.privdata"
    28  )
    29  
    30  var (
    31  	loggers  = make(map[string]Logger)
    32  	lock     = sync.Mutex{}
    33  	testMode bool
    34  )
    35  
    36  // defaultTestSpec is the default logging level for gossip tests
    37  var defaultTestSpec = "WARNING"
    38  
    39  type Logger interface {
    40  	Debug(args ...interface{})
    41  	Debugf(format string, args ...interface{})
    42  	Error(args ...interface{})
    43  	Errorf(format string, args ...interface{})
    44  	Fatal(args ...interface{})
    45  	Fatalf(format string, args ...interface{})
    46  	Info(args ...interface{})
    47  	Infof(format string, args ...interface{})
    48  	Panic(args ...interface{})
    49  	Panicf(format string, args ...interface{})
    50  	Warning(args ...interface{})
    51  	Warningf(format string, args ...interface{})
    52  	IsEnabledFor(l zapcore.Level) bool
    53  	With(args ...interface{}) *flogging.FabricLogger
    54  }
    55  
    56  // GetLogger returns a logger for given gossip logger name and peerID
    57  func GetLogger(name string, peerID string) Logger {
    58  	if peerID != "" && testMode {
    59  		name = name + "#" + peerID
    60  	}
    61  
    62  	lock.Lock()
    63  	defer lock.Unlock()
    64  
    65  	if lgr, ok := loggers[name]; ok {
    66  		return lgr
    67  	}
    68  
    69  	// Logger doesn't exist, create a new one
    70  	lgr := flogging.MustGetLogger(name)
    71  	loggers[name] = lgr
    72  	return lgr
    73  }
    74  
    75  // SetupTestLogging sets the default log levels for gossip unit tests to defaultTestSpec
    76  func SetupTestLogging() {
    77  	SetupTestLoggingWithLevel(defaultTestSpec)
    78  }
    79  
    80  // SetupTestLoggingWithLevel sets the default log levels for gossip unit tests to level
    81  func SetupTestLoggingWithLevel(level string) {
    82  	testMode = true
    83  	flogging.ActivateSpec(level)
    84  }