github.com/intfoundation/intchain@v0.0.0-20220727031208-4316ad31ca73/log/logger_chain.go (about)

     1  package log
     2  
     3  import (
     4  	"github.com/mattn/go-colorable"
     5  	"os"
     6  	"path/filepath"
     7  	"sync"
     8  )
     9  
    10  var loggerMap sync.Map
    11  
    12  func newChainLogger(chainID string) Logger {
    13  
    14  	chainLogger := &logger{[]interface{}{}, new(swapHandler)}
    15  
    16  	loggerMap.Store(chainID, chainLogger)
    17  
    18  	return chainLogger
    19  }
    20  
    21  // NewLogger Create a new Logger for a particular Chain and return it
    22  func NewLogger(chainID, logDir string, logLevel int, fileLine bool, vmodule, backtrace string) Logger {
    23  
    24  	// logging
    25  	PrintOrigins(fileLine)
    26  
    27  	// Console Log
    28  	output := colorable.NewColorableStdout()
    29  	ostream := StreamHandler(output, TerminalFormat(true))
    30  	glogger := NewGlogHandler(ostream)
    31  
    32  	// Normal Rotation Log
    33  	if logDir != "" {
    34  		// Sha3 PreImages Log
    35  		preimages_logDir := filepath.Join(logDir, "preimages")
    36  		if err := os.MkdirAll(preimages_logDir, 0700); err != nil {
    37  			panic(err)
    38  		}
    39  		preimageFileHandler := Must.FileHandler(filepath.Join(preimages_logDir, "preimages.log"), TerminalFormat(false))
    40  		preimageFilter := MatchFilterHandler("module", "preimages", preimageFileHandler)
    41  
    42  		rfh, err := RotatingFileHandler(
    43  			logDir,
    44  			10*1024*1024,
    45  			TerminalFormat(false),
    46  			//JSONFormatOrderedEx(false, true),
    47  		)
    48  		if err != nil {
    49  			panic(err)
    50  		}
    51  		glogger.SetHandler(MultiHandler(ostream, rfh, preimageFilter))
    52  	}
    53  	glogger.Verbosity(Lvl(logLevel))
    54  	glogger.Vmodule(vmodule)
    55  	glogger.BacktraceAt(backtrace)
    56  
    57  	var logger Logger
    58  	if chainID == "" {
    59  		logger = Root()
    60  		logger.SetHandler(glogger)
    61  	} else {
    62  		logger = newChainLogger(chainID)
    63  		logger.SetHandler(glogger)
    64  	}
    65  
    66  	return logger
    67  }
    68  
    69  // GetLogger Get Logger from stored map by using Chain ID
    70  func GetLogger(chainID string) Logger {
    71  	logger, find := loggerMap.Load(chainID)
    72  	if find {
    73  		return logger.(Logger)
    74  	} else {
    75  		return nil
    76  	}
    77  }
    78  
    79  func RangeLogger(f func(key, value interface{}) bool) {
    80  	loggerMap.Range(f)
    81  }