github.com/sykesm/fabric@v1.1.0-preview.0.20200129034918-2aa12b1a0181/gossip/util/logging.go (about)

     1  /*
     2  Copyright IBM Corp. 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/hyperledger/fabric/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 loggers = make(map[string]Logger)
    31  var lock = sync.Mutex{}
    32  var testMode bool
    33  
    34  // defaultTestSpec is the default logging level for gossip tests
    35  var defaultTestSpec = "WARNING"
    36  
    37  type Logger interface {
    38  	Debug(args ...interface{})
    39  	Debugf(format string, args ...interface{})
    40  	Error(args ...interface{})
    41  	Errorf(format string, args ...interface{})
    42  	Fatal(args ...interface{})
    43  	Fatalf(format string, args ...interface{})
    44  	Info(args ...interface{})
    45  	Infof(format string, args ...interface{})
    46  	Panic(args ...interface{})
    47  	Panicf(format string, args ...interface{})
    48  	Warning(args ...interface{})
    49  	Warningf(format string, args ...interface{})
    50  	IsEnabledFor(l zapcore.Level) bool
    51  	With(args ...interface{}) *flogging.FabricLogger
    52  }
    53  
    54  // GetLogger returns a logger for given gossip logger name and peerID
    55  func GetLogger(name string, peerID string) Logger {
    56  	if peerID != "" && testMode {
    57  		name = name + "#" + peerID
    58  	}
    59  
    60  	lock.Lock()
    61  	defer lock.Unlock()
    62  
    63  	if lgr, ok := loggers[name]; ok {
    64  		return lgr
    65  	}
    66  
    67  	// Logger doesn't exist, create a new one
    68  	lgr := flogging.MustGetLogger(name)
    69  	loggers[name] = lgr
    70  	return lgr
    71  }
    72  
    73  // SetupTestLogging sets the default log levels for gossip unit tests to defaultTestSpec
    74  func SetupTestLogging() {
    75  	SetupTestLoggingWithLevel(defaultTestSpec)
    76  }
    77  
    78  // SetupTestLoggingWithLevel sets the default log levels for gossip unit tests to level
    79  func SetupTestLoggingWithLevel(level string) {
    80  	testMode = true
    81  	flogging.ActivateSpec(level)
    82  }