diff options
author | Teddy Wing | 2020-07-04 03:28:02 +0200 |
---|---|---|
committer | Teddy Wing | 2020-07-04 03:28:02 +0200 |
commit | ab8b50d5b98ab071c5f70d929f1ca76f3faf71ca (patch) | |
tree | f4793dd662f6095f8c7c06f7c1a7f21a5f23b0a3 /src | |
parent | 4498c8fdf70b67bc65d2d44a32afa901f1594e51 (diff) | |
download | fastcgi-conduit-ab8b50d5b98ab071c5f70d929f1ca76f3faf71ca.tar.bz2 |
server: Log errors
Provide a mechanism to get detailed error messages when 500 internal
server errors happen.
We don't want to expose any detailed error information to clients, but
it would be useful for administrators to know the cause of any errors.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | src/server.rs | 36 |
2 files changed, 24 insertions, 13 deletions
@@ -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), + } } |