mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-05-30 01:30:11 +02:00
lnd: use structured logs in mkErr
helper
This commit is contained in:
parent
755ad49440
commit
32fbea2f85
89
lnd.go
89
lnd.go
@ -8,6 +8,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/pprof"
|
"net/http/pprof"
|
||||||
@ -164,10 +165,21 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
err)
|
err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mkErr := func(format string, args ...interface{}) error {
|
mkErr := func(msg string, err error, attrs ...any) error {
|
||||||
ltndLog.Errorf("Shutting down because error in main "+
|
ltndLog.ErrorS(ctx, "Shutting down due to error in main "+
|
||||||
"method: "+format, args...)
|
"method", err, attrs...)
|
||||||
return fmt.Errorf(format, args...)
|
|
||||||
|
var (
|
||||||
|
params = []any{err}
|
||||||
|
fmtStr = msg + ": %w"
|
||||||
|
)
|
||||||
|
for _, attr := range attrs {
|
||||||
|
fmtStr += " %s"
|
||||||
|
|
||||||
|
params = append(params, attr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf(fmtStr, params...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show version at startup.
|
// Show version at startup.
|
||||||
@ -253,7 +265,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
if cfg.Pprof.CPUProfile != "" {
|
if cfg.Pprof.CPUProfile != "" {
|
||||||
f, err := os.Create(cfg.Pprof.CPUProfile)
|
f, err := os.Create(cfg.Pprof.CPUProfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to create CPU profile: %v", err)
|
return mkErr("unable to create CPU profile", err)
|
||||||
}
|
}
|
||||||
_ = runtimePprof.StartCPUProfile(f)
|
_ = runtimePprof.StartCPUProfile(f)
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -266,7 +278,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
// needs to be done early and once during the startup process, before
|
// needs to be done early and once during the startup process, before
|
||||||
// any DB access.
|
// any DB access.
|
||||||
if err := cfg.DB.Init(ctx, cfg.graphDatabaseDir()); err != nil {
|
if err := cfg.DB.Init(ctx, cfg.graphDatabaseDir()); err != nil {
|
||||||
return mkErr("error initializing DBs: %v", err)
|
return mkErr("error initializing DBs", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsManagerCfg := &TLSManagerCfg{
|
tlsManagerCfg := &TLSManagerCfg{
|
||||||
@ -291,7 +303,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
serverOpts, restDialOpts, restListen, cleanUp,
|
serverOpts, restDialOpts, restListen, cleanUp,
|
||||||
err := tlsManager.SetCertificateBeforeUnlock()
|
err := tlsManager.SetCertificateBeforeUnlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error setting cert before unlock: %v", err)
|
return mkErr("error setting cert before unlock", err)
|
||||||
}
|
}
|
||||||
if cleanUp != nil {
|
if cleanUp != nil {
|
||||||
defer cleanUp()
|
defer cleanUp()
|
||||||
@ -308,8 +320,12 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
// connections.
|
// connections.
|
||||||
lis, err := lncfg.ListenOnAddress(grpcEndpoint)
|
lis, err := lncfg.ListenOnAddress(grpcEndpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to listen on %s: %v",
|
return mkErr("unable to listen on grpc "+
|
||||||
grpcEndpoint, err)
|
"endpoint", err,
|
||||||
|
slog.String(
|
||||||
|
"endpoint",
|
||||||
|
grpcEndpoint.String(),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
defer lis.Close()
|
defer lis.Close()
|
||||||
|
|
||||||
@ -328,7 +344,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
rpcsLog, cfg.NoMacaroons, cfg.RPCMiddleware.Mandatory,
|
rpcsLog, cfg.NoMacaroons, cfg.RPCMiddleware.Mandatory,
|
||||||
)
|
)
|
||||||
if err := interceptorChain.Start(); err != nil {
|
if err := interceptorChain.Start(); err != nil {
|
||||||
return mkErr("error starting interceptor chain: %v", err)
|
return mkErr("error starting interceptor chain", err)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
err := interceptorChain.Stop()
|
err := interceptorChain.Stop()
|
||||||
@ -369,14 +385,14 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
rpcServer := newRPCServer(cfg, interceptorChain, implCfg, interceptor)
|
rpcServer := newRPCServer(cfg, interceptorChain, implCfg, interceptor)
|
||||||
err = rpcServer.RegisterWithGrpcServer(grpcServer)
|
err = rpcServer.RegisterWithGrpcServer(grpcServer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error registering gRPC server: %v", err)
|
return mkErr("error registering gRPC server", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that both the WalletUnlocker and LightningService have been
|
// Now that both the WalletUnlocker and LightningService have been
|
||||||
// registered with the GRPC server, we can start listening.
|
// registered with the GRPC server, we can start listening.
|
||||||
err = startGrpcListen(cfg, grpcServer, grpcListeners)
|
err = startGrpcListen(cfg, grpcServer, grpcListeners)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error starting gRPC listener: %v", err)
|
return mkErr("error starting gRPC listener", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now start the REST proxy for our gRPC server above. We'll ensure
|
// Now start the REST proxy for our gRPC server above. We'll ensure
|
||||||
@ -387,7 +403,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
ctx, cfg, rpcServer, restDialOpts, restListen,
|
ctx, cfg, rpcServer, restDialOpts, restListen,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error starting REST proxy: %v", err)
|
return mkErr("error starting REST proxy", err)
|
||||||
}
|
}
|
||||||
defer stopProxy()
|
defer stopProxy()
|
||||||
|
|
||||||
@ -442,7 +458,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
cfg.Cluster.ID)
|
cfg.Cluster.ID)
|
||||||
|
|
||||||
if err := leaderElector.Campaign(electionCtx); err != nil {
|
if err := leaderElector.Campaign(electionCtx); err != nil {
|
||||||
return mkErr("leadership campaign failed: %v", err)
|
return mkErr("leadership campaign failed", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
elected = true
|
elected = true
|
||||||
@ -455,7 +471,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
ltndLog.Infof("%v, exiting", err)
|
ltndLog.Infof("%v, exiting", err)
|
||||||
return nil
|
return nil
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return mkErr("unable to open databases: %v", err)
|
return mkErr("unable to open databases", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer cleanUp()
|
defer cleanUp()
|
||||||
@ -465,7 +481,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
grpcListeners,
|
grpcListeners,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error creating wallet config: %v", err)
|
return mkErr("error creating wallet config", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer cleanUp()
|
defer cleanUp()
|
||||||
@ -474,7 +490,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
partialChainControl, walletConfig,
|
partialChainControl, walletConfig,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error loading chain control: %v", err)
|
return mkErr("error loading chain control", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer cleanUp()
|
defer cleanUp()
|
||||||
@ -487,7 +503,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error deriving node key: %v", err)
|
return mkErr("error deriving node key", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Tor.StreamIsolation && cfg.Tor.SkipProxyForClearNetTargets {
|
if cfg.Tor.StreamIsolation && cfg.Tor.SkipProxyForClearNetTargets {
|
||||||
@ -520,7 +536,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
// Start the tor controller before giving it to any other
|
// Start the tor controller before giving it to any other
|
||||||
// subsystems.
|
// subsystems.
|
||||||
if err := torController.Start(); err != nil {
|
if err := torController.Start(); err != nil {
|
||||||
return mkErr("unable to initialize tor controller: %v",
|
return mkErr("unable to initialize tor controller",
|
||||||
err)
|
err)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -540,7 +556,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("error deriving tower key: %v", err)
|
return mkErr("error deriving tower key", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
wtCfg := &watchtower.Config{
|
wtCfg := &watchtower.Config{
|
||||||
@ -581,12 +597,12 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
wtCfg, lncfg.NormalizeAddresses,
|
wtCfg, lncfg.NormalizeAddresses,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to configure watchtower: %v", err)
|
return mkErr("unable to configure watchtower", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tower, err = watchtower.New(wtConfig)
|
tower, err = watchtower.New(wtConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to create watchtower: %v", err)
|
return mkErr("unable to create watchtower", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -609,7 +625,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
implCfg,
|
implCfg,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to create server: %v", err)
|
return mkErr("unable to create server", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up an autopilot manager from the current config. This will be
|
// Set up an autopilot manager from the current config. This will be
|
||||||
@ -620,22 +636,21 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
cfg.ActiveNetParams,
|
cfg.ActiveNetParams,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to initialize autopilot: %v", err)
|
return mkErr("unable to initialize autopilot", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
atplManager, err := autopilot.NewManager(atplCfg)
|
atplManager, err := autopilot.NewManager(atplCfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to create autopilot manager: %v", err)
|
return mkErr("unable to create autopilot manager", err)
|
||||||
}
|
}
|
||||||
if err := atplManager.Start(); err != nil {
|
if err := atplManager.Start(); err != nil {
|
||||||
return mkErr("unable to start autopilot manager: %v", err)
|
return mkErr("unable to start autopilot manager", err)
|
||||||
}
|
}
|
||||||
defer atplManager.Stop()
|
defer atplManager.Stop()
|
||||||
|
|
||||||
err = tlsManager.LoadPermanentCertificate(activeChainControl.KeyRing)
|
err = tlsManager.LoadPermanentCertificate(activeChainControl.KeyRing)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to load permanent TLS certificate: %v",
|
return mkErr("unable to load permanent TLS certificate", err)
|
||||||
err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now we have created all dependencies necessary to populate and
|
// Now we have created all dependencies necessary to populate and
|
||||||
@ -646,10 +661,10 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
server.invoiceHtlcModifier,
|
server.invoiceHtlcModifier,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to add deps to RPC server: %v", err)
|
return mkErr("unable to add deps to RPC server", err)
|
||||||
}
|
}
|
||||||
if err := rpcServer.Start(); err != nil {
|
if err := rpcServer.Start(); err != nil {
|
||||||
return mkErr("unable to start RPC server: %v", err)
|
return mkErr("unable to start RPC server", err)
|
||||||
}
|
}
|
||||||
defer rpcServer.Stop()
|
defer rpcServer.Stop()
|
||||||
|
|
||||||
@ -657,7 +672,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
interceptorChain.SetRPCActive()
|
interceptorChain.SetRPCActive()
|
||||||
|
|
||||||
if err := interceptor.Notifier.NotifyReady(true); err != nil {
|
if err := interceptor.Notifier.NotifyReady(true); err != nil {
|
||||||
return mkErr("error notifying ready: %v", err)
|
return mkErr("error notifying ready", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// We'll wait until we're fully synced to continue the start up of the
|
// We'll wait until we're fully synced to continue the start up of the
|
||||||
@ -666,7 +681,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
// funds.
|
// funds.
|
||||||
_, bestHeight, err := activeChainControl.ChainIO.GetBestBlock()
|
_, bestHeight, err := activeChainControl.ChainIO.GetBestBlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to determine chain tip: %v", err)
|
return mkErr("unable to determine chain tip", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ltndLog.Infof("Waiting for chain backend to finish sync, "+
|
ltndLog.Infof("Waiting for chain backend to finish sync, "+
|
||||||
@ -697,7 +712,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
case res := <-syncedResChan:
|
case res := <-syncedResChan:
|
||||||
if res.err != nil {
|
if res.err != nil {
|
||||||
return mkErr("unable to determine if wallet "+
|
return mkErr("unable to determine if wallet "+
|
||||||
"is synced: %v", res.err)
|
"is synced", res.err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ltndLog.Debugf("Syncing to block timestamp: %v, is "+
|
ltndLog.Debugf("Syncing to block timestamp: %v, is "+
|
||||||
@ -724,7 +739,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
|
|
||||||
_, bestHeight, err = activeChainControl.ChainIO.GetBestBlock()
|
_, bestHeight, err = activeChainControl.ChainIO.GetBestBlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mkErr("unable to determine chain tip: %v", err)
|
return mkErr("unable to determine chain tip", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ltndLog.Infof("Chain backend is fully synced (end_height=%v)!",
|
ltndLog.Infof("Chain backend is fully synced (end_height=%v)!",
|
||||||
@ -753,7 +768,7 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
return mkErr("unable to start server: %v", err)
|
return mkErr("unable to start server", err)
|
||||||
|
|
||||||
case <-interceptor.ShutdownChannel():
|
case <-interceptor.ShutdownChannel():
|
||||||
return nil
|
return nil
|
||||||
@ -767,13 +782,13 @@ func Main(cfg *Config, lisCfg ListenerCfg, implCfg *ImplementationCfg,
|
|||||||
// stopped together with the autopilot service.
|
// stopped together with the autopilot service.
|
||||||
if cfg.Autopilot.Active {
|
if cfg.Autopilot.Active {
|
||||||
if err := atplManager.StartAgent(); err != nil {
|
if err := atplManager.StartAgent(); err != nil {
|
||||||
return mkErr("unable to start autopilot agent: %v", err)
|
return mkErr("unable to start autopilot agent", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Watchtower.Active {
|
if cfg.Watchtower.Active {
|
||||||
if err := tower.Start(); err != nil {
|
if err := tower.Start(); err != nil {
|
||||||
return mkErr("unable to start watchtower: %v", err)
|
return mkErr("unable to start watchtower", err)
|
||||||
}
|
}
|
||||||
defer tower.Stop()
|
defer tower.Stop()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user