diff --git a/postgres/src/lib.rs b/postgres/src/lib.rs index 08261a2..bfaa53e 100644 --- a/postgres/src/lib.rs +++ b/postgres/src/lib.rs @@ -39,6 +39,26 @@ use uuid::Uuid; #[cfg(test)] mod testing; +/// An `ErrorSink` implementation that logs errors to the Rust log. +#[derive(Debug, Clone, Copy)] +pub struct LogErrorSink; + +impl LogErrorSink { + fn new() -> Box { + Box::new(Self) + } +} + +impl bb8::ErrorSink for LogErrorSink { + fn sink(&self, e: tokio_postgres::Error) { + log::error!("Postgres connection error: {e}"); + } + + fn boxed_clone(&self) -> Box> { + Self::new() + } +} + /// A storage backend which uses Postgres. pub struct PostgresStorage { pool: bb8::Pool>, @@ -49,7 +69,10 @@ impl PostgresStorage { let connector = native_tls::TlsConnector::new()?; let connector = postgres_native_tls::MakeTlsConnector::new(connector); let manager = PostgresConnectionManager::new_from_stringlike(connection_string, connector)?; - let pool = bb8::Pool::builder().build(manager).await?; + let pool = bb8::Pool::builder() + .error_sink(LogErrorSink::new()) + .build(manager) + .await?; Ok(Self { pool }) } }