60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
|
package requestlog
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"sync/atomic"
|
||
|
|
||
|
"github.com/ethereum/go-ethereum/log"
|
||
|
|
||
|
"github.com/status-im/status-go/logutils"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// requestLogger is the request logger object
|
||
|
requestLogger log.Logger
|
||
|
// isRequestLoggingEnabled controls whether request logging is enabled
|
||
|
isRequestLoggingEnabled atomic.Bool
|
||
|
)
|
||
|
|
||
|
// NewRequestLogger creates a new request logger object
|
||
|
func NewRequestLogger(ctx ...interface{}) log.Logger {
|
||
|
requestLogger = log.New(ctx...)
|
||
|
return requestLogger
|
||
|
}
|
||
|
|
||
|
// EnableRequestLogging enables or disables RPC logging
|
||
|
func EnableRequestLogging(enable bool) {
|
||
|
if enable {
|
||
|
isRequestLoggingEnabled.Store(true)
|
||
|
} else {
|
||
|
isRequestLoggingEnabled.Store(false)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// IsRequestLoggingEnabled returns whether RPC logging is enabled
|
||
|
func IsRequestLoggingEnabled() bool {
|
||
|
return isRequestLoggingEnabled.Load()
|
||
|
}
|
||
|
|
||
|
// GetRequestLogger returns the RPC logger object
|
||
|
func GetRequestLogger() log.Logger {
|
||
|
return requestLogger
|
||
|
}
|
||
|
|
||
|
func ConfigureAndEnableRequestLogging(file string) error {
|
||
|
log.Info("initialising request logger", "log file", file)
|
||
|
requestLogger := NewRequestLogger()
|
||
|
if file == "" {
|
||
|
return errors.New("log file path is required")
|
||
|
}
|
||
|
fileOpts := logutils.FileOptions{
|
||
|
Filename: file,
|
||
|
MaxBackups: 1,
|
||
|
}
|
||
|
handler := logutils.FileHandlerWithRotation(fileOpts, log.LogfmtFormat())
|
||
|
filteredHandler := log.LvlFilterHandler(log.LvlDebug, handler)
|
||
|
requestLogger.SetHandler(filteredHandler)
|
||
|
EnableRequestLogging(true)
|
||
|
return nil
|
||
|
}
|