github.com/status-im/status-go@v1.1.0/logutils/requestlog/request_log.go (about)

     1  package requestlog
     2  
     3  import (
     4  	"errors"
     5  	"sync/atomic"
     6  
     7  	"github.com/ethereum/go-ethereum/log"
     8  
     9  	"github.com/status-im/status-go/logutils"
    10  )
    11  
    12  var (
    13  	// requestLogger is the request logger object
    14  	requestLogger log.Logger
    15  	// isRequestLoggingEnabled controls whether request logging is enabled
    16  	isRequestLoggingEnabled atomic.Bool
    17  )
    18  
    19  // NewRequestLogger creates a new request logger object
    20  func NewRequestLogger(ctx ...interface{}) log.Logger {
    21  	requestLogger = log.New(ctx...)
    22  	return requestLogger
    23  }
    24  
    25  // EnableRequestLogging enables or disables RPC logging
    26  func EnableRequestLogging(enable bool) {
    27  	if enable {
    28  		isRequestLoggingEnabled.Store(true)
    29  	} else {
    30  		isRequestLoggingEnabled.Store(false)
    31  	}
    32  }
    33  
    34  // IsRequestLoggingEnabled returns whether RPC logging is enabled
    35  func IsRequestLoggingEnabled() bool {
    36  	return isRequestLoggingEnabled.Load()
    37  }
    38  
    39  // GetRequestLogger returns the RPC logger object
    40  func GetRequestLogger() log.Logger {
    41  	return requestLogger
    42  }
    43  
    44  func ConfigureAndEnableRequestLogging(file string) error {
    45  	log.Info("initialising request logger", "log file", file)
    46  	requestLogger := NewRequestLogger()
    47  	if file == "" {
    48  		return errors.New("log file path is required")
    49  	}
    50  	fileOpts := logutils.FileOptions{
    51  		Filename:   file,
    52  		MaxBackups: 1,
    53  	}
    54  	handler := logutils.FileHandlerWithRotation(fileOpts, log.LogfmtFormat())
    55  	filteredHandler := log.LvlFilterHandler(log.LvlDebug, handler)
    56  	requestLogger.SetHandler(filteredHandler)
    57  	EnableRequestLogging(true)
    58  	return nil
    59  }