aboutsummaryrefslogtreecommitdiffstats
path: root/src/server.rs
diff options
context:
space:
mode:
authorTeddy Wing2020-07-04 03:28:02 +0200
committerTeddy Wing2020-07-04 03:28:02 +0200
commitab8b50d5b98ab071c5f70d929f1ca76f3faf71ca (patch)
treef4793dd662f6095f8c7c06f7c1a7f21a5f23b0a3 /src/server.rs
parent4498c8fdf70b67bc65d2d44a32afa901f1594e51 (diff)
downloadfastcgi-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/server.rs')
-rw-r--r--src/server.rs36
1 files changed, 23 insertions, 13 deletions
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),
+ }
}