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 }