diff options
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | src/server.rs | 36 |
3 files changed, 25 insertions, 13 deletions
@@ -9,4 +9,5 @@ conduit-router = "0.9.0-alpha.2" fastcgi = "1.0.0" http = "0.2.1" Inflector = "0.11.4" +log = "0.4.8" snafu = "0.6.8" @@ -1,6 +1,7 @@ extern crate conduit; extern crate fastcgi; extern crate http; +extern crate log; mod request; mod server; diff --git a/src/server.rs b/src/server.rs index 9bbba00..22bf244 100644 --- a/src/server.rs +++ b/src/server.rs @@ -3,6 +3,8 @@ use std::io::Write; use conduit::Handler; +use log::error; + use snafu::{ResultExt, Snafu}; use crate::request; @@ -31,16 +33,22 @@ impl Server { fastcgi::run(move |mut raw_request| { match handle_request(&mut raw_request, &handler) { Ok(_) => (), - - // TODO: log - // Ignore write errors as clients will have closed the - // connection by this point. - Err(Error::Write { .. }) => (), - - Err(Error::RequestBuilder { .. }) => - internal_server_error(&mut raw_request.stdout()), - Err(Error::ConduitResponse { .. }) => - internal_server_error(&mut raw_request.stdout()), + Err(e) => match e { + // Ignore write errors as clients will have closed the + // connection by this point. + Error::Write { .. } => error!("Write error: {}", e), + + Error::RequestBuilder { .. } => { + error!("Unable to build request: {}", e); + + internal_server_error(&mut raw_request.stdout()) + }, + Error::ConduitResponse { .. } => { + error!("Error getting response: {}", e); + + internal_server_error(&mut raw_request.stdout()) + }, + } } }); @@ -95,13 +103,15 @@ where H: Handler + 'static + Sync fn internal_server_error<W: Write>(mut w: W) { let code = conduit::StatusCode::INTERNAL_SERVER_ERROR; - write!( + match write!( w, "{} {} {}\r\n{}\r\n\r\n", HTTP_VERSION, code, code.canonical_reason().unwrap_or_default(), "Content-Length: 0", - ) - .unwrap_or(()) + ) { + Ok(_) => (), + Err(e) => error!("Write error: {}", e), + } } |