• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 9617502354

21 Jun 2024 05:27PM UTC coverage: 58.414% (+0.004%) from 58.41%
9617502354

Pull #8856

github

web-flow
[docs] Update go instructions

Building current lnd `0.18` fails with older go (`1.19.7`).

* Updated go download path to 1.22.4
* Updated hashes
* Added `rm -rf` instructions as per [go.dev instructions](https://go.dev/doc/install)
Pull Request #8856: [docs] Update go instructions

123389 of 211233 relevant lines covered (58.41%)

28572.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.2
/log.go
1
package lnd
2

3
import (
4
        "github.com/btcsuite/btcd/connmgr"
5
        "github.com/btcsuite/btclog"
6
        "github.com/lightninglabs/neutrino"
7
        sphinx "github.com/lightningnetwork/lightning-onion"
8
        "github.com/lightningnetwork/lnd/autopilot"
9
        "github.com/lightningnetwork/lnd/build"
10
        "github.com/lightningnetwork/lnd/chainntnfs"
11
        "github.com/lightningnetwork/lnd/chainreg"
12
        "github.com/lightningnetwork/lnd/chanacceptor"
13
        "github.com/lightningnetwork/lnd/chanbackup"
14
        "github.com/lightningnetwork/lnd/chanfitness"
15
        "github.com/lightningnetwork/lnd/channeldb"
16
        "github.com/lightningnetwork/lnd/channelnotifier"
17
        "github.com/lightningnetwork/lnd/cluster"
18
        "github.com/lightningnetwork/lnd/contractcourt"
19
        "github.com/lightningnetwork/lnd/discovery"
20
        "github.com/lightningnetwork/lnd/funding"
21
        "github.com/lightningnetwork/lnd/healthcheck"
22
        "github.com/lightningnetwork/lnd/htlcswitch"
23
        "github.com/lightningnetwork/lnd/invoices"
24
        "github.com/lightningnetwork/lnd/lnrpc/autopilotrpc"
25
        "github.com/lightningnetwork/lnd/lnrpc/chainrpc"
26
        "github.com/lightningnetwork/lnd/lnrpc/devrpc"
27
        "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
28
        "github.com/lightningnetwork/lnd/lnrpc/neutrinorpc"
29
        "github.com/lightningnetwork/lnd/lnrpc/peersrpc"
30
        "github.com/lightningnetwork/lnd/lnrpc/routerrpc"
31
        "github.com/lightningnetwork/lnd/lnrpc/signrpc"
32
        "github.com/lightningnetwork/lnd/lnrpc/verrpc"
33
        "github.com/lightningnetwork/lnd/lnrpc/walletrpc"
34
        "github.com/lightningnetwork/lnd/lnwallet"
35
        "github.com/lightningnetwork/lnd/lnwallet/btcwallet"
36
        "github.com/lightningnetwork/lnd/lnwallet/chancloser"
37
        "github.com/lightningnetwork/lnd/lnwallet/chanfunding"
38
        "github.com/lightningnetwork/lnd/lnwallet/rpcwallet"
39
        "github.com/lightningnetwork/lnd/monitoring"
40
        "github.com/lightningnetwork/lnd/netann"
41
        "github.com/lightningnetwork/lnd/peer"
42
        "github.com/lightningnetwork/lnd/peernotifier"
43
        "github.com/lightningnetwork/lnd/routing"
44
        "github.com/lightningnetwork/lnd/rpcperms"
45
        "github.com/lightningnetwork/lnd/signal"
46
        "github.com/lightningnetwork/lnd/sweep"
47
        "github.com/lightningnetwork/lnd/tor"
48
        "github.com/lightningnetwork/lnd/watchtower"
49
        "github.com/lightningnetwork/lnd/watchtower/wtclient"
50
)
51

52
// replaceableLogger is a thin wrapper around a logger that is used so the
53
// logger can be replaced easily without some black pointer magic.
54
type replaceableLogger struct {
55
        btclog.Logger
56
        subsystem string
57
}
58

59
// Loggers can not be used before the log rotator has been initialized with a
60
// log file. This must be performed early during application startup by
61
// calling InitLogRotator() on the main log writer instance in the config.
62
var (
63
        // lndPkgLoggers is a list of all lnd package level loggers that are
64
        // registered. They are tracked here so they can be replaced once the
65
        // SetupLoggers function is called with the final root logger.
66
        lndPkgLoggers []*replaceableLogger
67

68
        // addLndPkgLogger is a helper function that creates a new replaceable
69
        // main lnd package level logger and adds it to the list of loggers that
70
        // are replaced again later, once the final root logger is ready.
71
        addLndPkgLogger = func(subsystem string) *replaceableLogger {
16✔
72
                l := &replaceableLogger{
16✔
73
                        Logger:    build.NewSubLogger(subsystem, nil),
16✔
74
                        subsystem: subsystem,
16✔
75
                }
16✔
76
                lndPkgLoggers = append(lndPkgLoggers, l)
16✔
77
                return l
16✔
78
        }
16✔
79

80
        // Loggers that need to be accessible from the lnd package can be placed
81
        // here. Loggers that are only used in sub modules can be added directly
82
        // by using the addSubLogger method. We declare all loggers so we never
83
        // run into a nil reference if they are used early. But the SetupLoggers
84
        // function should always be called as soon as possible to finish
85
        // setting them up properly with a root logger.
86
        ltndLog = addLndPkgLogger("LTND")
87
        rpcsLog = addLndPkgLogger("RPCS")
88
        srvrLog = addLndPkgLogger("SRVR")
89
        atplLog = addLndPkgLogger("ATPL")
90
)
91

92
// genSubLogger creates a logger for a subsystem. We provide an instance of
93
// a signal.Interceptor to be able to shutdown in the case of a critical error.
94
func genSubLogger(root *build.RotatingLogWriter,
95
        interceptor signal.Interceptor) func(string) btclog.Logger {
4✔
96

4✔
97
        // Create a shutdown function which will request shutdown from our
4✔
98
        // interceptor if it is listening.
4✔
99
        shutdown := func() {
4✔
100
                if !interceptor.Listening() {
×
101
                        return
×
102
                }
×
103

104
                interceptor.RequestShutdown()
×
105
        }
106

107
        // Return a function which will create a sublogger from our root
108
        // logger without shutdown fn.
109
        return func(tag string) btclog.Logger {
8✔
110
                return root.GenSubLogger(tag, shutdown)
4✔
111
        }
4✔
112
}
113

114
// SetupLoggers initializes all package-global logger variables.
115
func SetupLoggers(root *build.RotatingLogWriter, interceptor signal.Interceptor) {
4✔
116
        genLogger := genSubLogger(root, interceptor)
4✔
117

4✔
118
        // Now that we have the proper root logger, we can replace the
4✔
119
        // placeholder lnd package loggers.
4✔
120
        for _, l := range lndPkgLoggers {
8✔
121
                l.Logger = build.NewSubLogger(l.subsystem, genLogger)
4✔
122
                SetSubLogger(root, l.subsystem, l.Logger)
4✔
123
        }
4✔
124

125
        // Initialize loggers from packages outside of `lnd` first. The
126
        // packages below will overwrite the names of the loggers they import.
127
        // For instance, the logger in `neutrino.query` is overwritten by
128
        // `btcwallet.chain`, which is overwritten by `lnwallet`. To ensure the
129
        // overwriting works, we need to initialize the loggers here so they
130
        // can be overwritten later.
131
        AddSubLogger(root, "BTCN", interceptor, neutrino.UseLogger)
4✔
132
        AddSubLogger(root, "CMGR", interceptor, connmgr.UseLogger)
4✔
133

4✔
134
        // Some of the loggers declared in the main lnd package are also used
4✔
135
        // in sub packages.
4✔
136
        signal.UseLogger(ltndLog)
4✔
137
        autopilot.UseLogger(atplLog)
4✔
138

4✔
139
        AddSubLogger(root, "LNWL", interceptor, lnwallet.UseLogger)
4✔
140
        AddSubLogger(root, "DISC", interceptor, discovery.UseLogger)
4✔
141
        AddSubLogger(root, "NTFN", interceptor, chainntnfs.UseLogger)
4✔
142
        AddSubLogger(root, "CHDB", interceptor, channeldb.UseLogger)
4✔
143
        AddSubLogger(root, "HSWC", interceptor, htlcswitch.UseLogger)
4✔
144
        AddSubLogger(root, "CNCT", interceptor, contractcourt.UseLogger)
4✔
145
        AddSubLogger(root, "UTXN", interceptor, contractcourt.UseNurseryLogger)
4✔
146
        AddSubLogger(root, "BRAR", interceptor, contractcourt.UseBreachLogger)
4✔
147
        AddSubLogger(root, "SPHX", interceptor, sphinx.UseLogger)
4✔
148
        AddSubLogger(root, "SWPR", interceptor, sweep.UseLogger)
4✔
149
        AddSubLogger(root, "SGNR", interceptor, signrpc.UseLogger)
4✔
150
        AddSubLogger(root, "WLKT", interceptor, walletrpc.UseLogger)
4✔
151
        AddSubLogger(root, "ARPC", interceptor, autopilotrpc.UseLogger)
4✔
152
        AddSubLogger(root, "NRPC", interceptor, neutrinorpc.UseLogger)
4✔
153
        AddSubLogger(root, "DRPC", interceptor, devrpc.UseLogger)
4✔
154
        AddSubLogger(root, "INVC", interceptor, invoices.UseLogger)
4✔
155
        AddSubLogger(root, "NANN", interceptor, netann.UseLogger)
4✔
156
        AddSubLogger(root, "WTWR", interceptor, watchtower.UseLogger)
4✔
157
        AddSubLogger(root, "NTFR", interceptor, chainrpc.UseLogger)
4✔
158
        AddSubLogger(root, "IRPC", interceptor, invoicesrpc.UseLogger)
4✔
159
        AddSubLogger(root, "CHNF", interceptor, channelnotifier.UseLogger)
4✔
160
        AddSubLogger(root, "CHBU", interceptor, chanbackup.UseLogger)
4✔
161
        AddSubLogger(root, "PROM", interceptor, monitoring.UseLogger)
4✔
162
        AddSubLogger(root, "WTCL", interceptor, wtclient.UseLogger)
4✔
163
        AddSubLogger(root, "PRNF", interceptor, peernotifier.UseLogger)
4✔
164
        AddSubLogger(root, "CHFD", interceptor, chanfunding.UseLogger)
4✔
165
        AddSubLogger(root, "PEER", interceptor, peer.UseLogger)
4✔
166
        AddSubLogger(root, "CHCL", interceptor, chancloser.UseLogger)
4✔
167

4✔
168
        AddSubLogger(root, routing.Subsystem, interceptor, routing.UseLogger)
4✔
169
        AddSubLogger(root, routerrpc.Subsystem, interceptor, routerrpc.UseLogger)
4✔
170
        AddSubLogger(root, chanfitness.Subsystem, interceptor, chanfitness.UseLogger)
4✔
171
        AddSubLogger(root, verrpc.Subsystem, interceptor, verrpc.UseLogger)
4✔
172
        AddSubLogger(root, healthcheck.Subsystem, interceptor, healthcheck.UseLogger)
4✔
173
        AddSubLogger(root, chainreg.Subsystem, interceptor, chainreg.UseLogger)
4✔
174
        AddSubLogger(root, chanacceptor.Subsystem, interceptor, chanacceptor.UseLogger)
4✔
175
        AddSubLogger(root, funding.Subsystem, interceptor, funding.UseLogger)
4✔
176
        AddSubLogger(root, cluster.Subsystem, interceptor, cluster.UseLogger)
4✔
177
        AddSubLogger(root, rpcperms.Subsystem, interceptor, rpcperms.UseLogger)
4✔
178
        AddSubLogger(root, tor.Subsystem, interceptor, tor.UseLogger)
4✔
179
        AddSubLogger(root, btcwallet.Subsystem, interceptor, btcwallet.UseLogger)
4✔
180
        AddSubLogger(root, rpcwallet.Subsystem, interceptor, rpcwallet.UseLogger)
4✔
181
        AddSubLogger(root, peersrpc.Subsystem, interceptor, peersrpc.UseLogger)
4✔
182
}
183

184
// AddSubLogger is a helper method to conveniently create and register the
185
// logger of one or more sub systems.
186
func AddSubLogger(root *build.RotatingLogWriter, subsystem string,
187
        interceptor signal.Interceptor, useLoggers ...func(btclog.Logger)) {
4✔
188

4✔
189
        // genSubLogger will return a callback for creating a logger instance,
4✔
190
        // which we will give to the root logger.
4✔
191
        genLogger := genSubLogger(root, interceptor)
4✔
192

4✔
193
        // Create and register just a single logger to prevent them from
4✔
194
        // overwriting each other internally.
4✔
195
        logger := build.NewSubLogger(subsystem, genLogger)
4✔
196
        SetSubLogger(root, subsystem, logger, useLoggers...)
4✔
197
}
4✔
198

199
// SetSubLogger is a helper method to conveniently register the logger of a sub
200
// system.
201
func SetSubLogger(root *build.RotatingLogWriter, subsystem string,
202
        logger btclog.Logger, useLoggers ...func(btclog.Logger)) {
4✔
203

4✔
204
        root.RegisterSubLogger(subsystem, logger)
4✔
205
        for _, useLogger := range useLoggers {
8✔
206
                useLogger(logger)
4✔
207
        }
4✔
208
}
209

210
// logClosure is used to provide a closure over expensive logging operations so
211
// don't have to be performed when the logging level doesn't warrant it.
212
type logClosure func() string
213

214
// String invokes the underlying function and returns the result.
215
func (c logClosure) String() string {
×
216
        return c()
×
217
}
×
218

219
// newLogClosure returns a new closure over a function that returns a string
220
// which itself provides a Stringer interface so that it can be used with the
221
// logging system.
222
func newLogClosure(c func() string) logClosure {
4✔
223
        return logClosure(c)
4✔
224
}
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc