Skip to content

Commit d115f88

Browse files
committed
Introduce structured, span-based observability through Logger interface
This change allows users to create hierarchical span objects through the Logger interface for specific computations, such as the handling of HTLCs. These span objects will be held in LDK across the corresponding lifetimes before being dropped, providing insight in durations and latencies.
1 parent 89f5217 commit d115f88

File tree

15 files changed

+809
-295
lines changed

15 files changed

+809
-295
lines changed

lightning-dns-resolver/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ mod test {
176176
use lightning::sign::{KeysManager, NodeSigner, Recipient};
177177
use lightning::types::features::InitFeatures;
178178
use lightning::types::payment::PaymentHash;
179-
use lightning::util::logger::Logger;
179+
use lightning::util::logger::{Logger, Span};
180180

181181
use lightning::{
182182
commitment_signed_dance, expect_payment_claimed, expect_pending_htlcs_forwardable,
@@ -191,9 +191,13 @@ mod test {
191191
node: &'static str,
192192
}
193193
impl Logger for TestLogger {
194+
type UserSpan = ();
195+
194196
fn log(&self, record: lightning::util::logger::Record) {
195197
eprintln!("{}: {}", self.node, record.args);
196198
}
199+
200+
fn start(&self, _span: Span, _parent: Option<&()>) -> () {}
197201
}
198202
impl Deref for TestLogger {
199203
type Target = TestLogger;

lightning-net-tokio/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,8 @@ mod tests {
640640

641641
pub struct TestLogger();
642642
impl lightning::util::logger::Logger for TestLogger {
643+
type UserSpan = ();
644+
643645
fn log(&self, record: lightning::util::logger::Record) {
644646
println!(
645647
"{:<5} [{} : {}, {}] {}",
@@ -650,6 +652,8 @@ mod tests {
650652
record.args
651653
);
652654
}
655+
656+
fn start(&self, _span: lightning::util::logger::Span, _parent: Option<&()>) -> () {}
653657
}
654658

655659
struct MsgHandler {

lightning-rapid-gossip-sync/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,12 @@
5151
//! use lightning::routing::gossip::NetworkGraph;
5252
//! use lightning_rapid_gossip_sync::RapidGossipSync;
5353
//!
54-
//! # use lightning::util::logger::{Logger, Record};
54+
//! # use lightning::util::logger::{Logger, Record, Span};
5555
//! # struct FakeLogger {}
5656
//! # impl Logger for FakeLogger {
57+
//! # type UserSpan = ();
5758
//! # fn log(&self, record: Record) { }
59+
//! # fn start(&self, _span: Span, parent: Option<&()>) -> () {}
5860
//! # }
5961
//! # let logger = FakeLogger {};
6062
//!

lightning/src/chain/channelmonitor.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, SpendableOutputDe
4848
use crate::chain::onchaintx::{ClaimEvent, FeerateStrategy, OnchainTxHandler};
4949
use crate::chain::package::{CounterpartyOfferedHTLCOutput, CounterpartyReceivedHTLCOutput, HolderFundingOutput, HolderHTLCOutput, PackageSolvingData, PackageTemplate, RevokedOutput, RevokedHTLCOutput};
5050
use crate::chain::Filter;
51-
use crate::util::logger::{Logger, Record};
51+
use crate::util::logger::{Logger, Record, Span};
5252
use crate::util::persist::MonitorName;
5353
use crate::util::ser::{Readable, ReadableArgs, RequiredWrapper, MaybeReadable, UpgradableRequired, Writer, Writeable, U48};
5454
use crate::util::byte_utils;
@@ -1471,12 +1471,18 @@ pub(crate) struct WithChannelMonitor<'a, L: Deref> where L::Target: Logger {
14711471
}
14721472

14731473
impl<'a, L: Deref> Logger for WithChannelMonitor<'a, L> where L::Target: Logger {
1474+
type UserSpan = <<L as Deref>::Target as Logger>::UserSpan;
1475+
14741476
fn log(&self, mut record: Record) {
14751477
record.peer_id = self.peer_id;
14761478
record.channel_id = self.channel_id;
14771479
record.payment_hash = self.payment_hash;
14781480
self.logger.log(record)
14791481
}
1482+
1483+
fn start(&self, span: Span, parent: Option<&Self::UserSpan>) -> Self::UserSpan {
1484+
self.logger.start(span, parent)
1485+
}
14801486
}
14811487

14821488
impl<'a, L: Deref> WithChannelMonitor<'a, L> where L::Target: Logger {

0 commit comments

Comments
 (0)