diff --git a/jobs-actix/src/worker.rs b/jobs-actix/src/worker.rs index 4567f77..039a2eb 100644 --- a/jobs-actix/src/worker.rs +++ b/jobs-actix/src/worker.rs @@ -56,6 +56,19 @@ impl Worker for LocalWorkerHandle { } } +struct LogOnDrop(F) +where + F: Fn() -> Span; + +impl Drop for LogOnDrop +where + F: Fn() -> Span, +{ + fn drop(&mut self) { + (self.0)().in_scope(|| info!("Worker closing")); + } +} + pub(crate) async fn local_worker( queue: String, processors: CachedProcessorMap, @@ -68,6 +81,8 @@ pub(crate) async fn local_worker( let handle = LocalWorkerHandle { tx, id, queue }; + let log_on_drop = LogOnDrop(|| handle.span("closing")); + loop { let span = handle.span("request"); if let Err(e) = server @@ -105,5 +120,5 @@ pub(crate) async fn local_worker( break; } - handle.span("closing").in_scope(|| info!("Worker closing")); + drop(log_on_drop); }