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