ldk_logger.go raw

   1  package ldk
   2  
   3  import (
   4  	"os"
   5  	"path/filepath"
   6  
   7  	"github.com/getAlby/hub/logger"
   8  	"github.com/getAlby/ldk-node-go/ldk_node"
   9  	"github.com/orandin/lumberjackrus"
  10  	"github.com/sirupsen/logrus"
  11  )
  12  
  13  const ldkLogFilename = "ldk.log"
  14  const logDir = "log"
  15  
  16  type ldkLogger struct {
  17  	logLevel logrus.Level
  18  	logger   *logrus.Logger
  19  }
  20  
  21  func NewLDKLogger(logLevel logrus.Level, logToFile bool, workDir string) (ldk_node.LogWriter, error) {
  22  	logger, err := createLogger(logLevel, logToFile, workDir)
  23  	if err != nil {
  24  		return nil, err
  25  	}
  26  	return &ldkLogger{
  27  		logLevel: logLevel,
  28  		logger:   logger,
  29  	}, nil
  30  }
  31  
  32  func (ldkLogger *ldkLogger) Log(record ldk_node.LogRecord) {
  33  	ldkLogger.logger.WithFields(logrus.Fields{
  34  		"log_type":    "LDK-node",
  35  		"line":        record.Line,
  36  		"module_path": record.ModulePath,
  37  	}).Log(mapLogLevel(record.Level), record.Args)
  38  }
  39  
  40  func mapLogLevel(logLevel ldk_node.LogLevel) logrus.Level {
  41  	switch logLevel {
  42  	case ldk_node.LogLevelGossip:
  43  		return logrus.TraceLevel
  44  	case ldk_node.LogLevelTrace:
  45  		return logrus.TraceLevel
  46  	case ldk_node.LogLevelDebug:
  47  		return logrus.DebugLevel
  48  	case ldk_node.LogLevelInfo:
  49  		return logrus.InfoLevel
  50  	case ldk_node.LogLevelWarn:
  51  		return logrus.WarnLevel
  52  	case ldk_node.LogLevelError:
  53  		return logrus.ErrorLevel
  54  	}
  55  	logger.Logger.WithField("log_level", logLevel).Error("Unknown LDK log level")
  56  	return logrus.ErrorLevel
  57  }
  58  
  59  func createLogger(logLevel logrus.Level, logToFile bool, workDir string) (*logrus.Logger, error) {
  60  	ldkLogger := logrus.New()
  61  	ldkLogger.SetFormatter(&logrus.JSONFormatter{})
  62  	ldkLogger.SetOutput(os.Stdout)
  63  
  64  	ldkLogger.SetLevel(logLevel)
  65  
  66  	if logToFile {
  67  		parentDir := filepath.Dir(workDir)
  68  		ldkLogFilePath := filepath.Join(parentDir, logDir, ldkLogFilename)
  69  		ldkFileLoggerHook, err := lumberjackrus.NewHook(
  70  			&lumberjackrus.LogFile{
  71  				Filename:   ldkLogFilePath,
  72  				MaxAge:     3,
  73  				MaxBackups: 3,
  74  			},
  75  			logLevel,
  76  			&logrus.JSONFormatter{},
  77  			nil,
  78  		)
  79  		if err != nil {
  80  			logger.Logger.WithError(err).Error("Failed to add LDK file logger")
  81  			return nil, err
  82  		}
  83  
  84  		ldkLogger.AddHook(ldkFileLoggerHook)
  85  	}
  86  	return ldkLogger, nil
  87  }
  88