diff --git a/HitLock/src/main.rs b/HitLock/src/main.rs index 2d8580b..7ec9f01 100644 --- a/HitLock/src/main.rs +++ b/HitLock/src/main.rs @@ -3,8 +3,9 @@ mod users; mod webfinger; use std::{ - fmt, + fmt::{self, Debug}, iter::once, + panic, task::{Context, Poll}, }; @@ -14,7 +15,7 @@ use axum::{ routing::{get, post}, }; use inbox::inbox_post; -use log::{info, trace}; +use log::{error, info, trace}; use tower_layer::Layer; use tower_service::Service; use users::users_get; @@ -34,13 +35,42 @@ fn init_logger() { async fn main() { init_logger(); + panic::set_hook(Box::new(|i| { + if let Some(loc) = i.location() { + if let Some(s) = i.payload().downcast_ref::<&str>() { + error!( + "Panicked at {}:{}:{}\n{}", + loc.file(), + loc.line(), + loc.column(), + sanitize_printable(s) + ); + } else if let Some(s) = i.payload().downcast_ref::() { + error!( + "Panicked at {}:{}:{}\n{}", + loc.file(), + loc.line(), + loc.column(), + sanitize_printable(s) + ); + } + } else { + if let Some(s) = i.payload().downcast_ref::<&str>() { + error!("Panicked\n{s:?}",); + } else if let Some(s) = i.payload().downcast_ref::() { + error!("Panicked\n{s:?}",); + } + } + })); + let app = Router::new() .route("/", get(root)) .route("/.well-known/webfinger", get(webfinger_get)) .route("/users/{users}/", get(users_get)) .route("/users/{users}", get(users_get)) .route("/inbox/{users}/", post(inbox_post)) - .fallback(fallback); + .fallback(fallback) + .layer(TraceLayer); let listener = tokio::net::TcpListener::bind("0.0.0.0:8000").await.unwrap(); axum::serve(listener, app).await.unwrap();