aboutsummaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/lib.rs1
-rw-r--r--src/server.rs36
2 files changed, 24 insertions, 13 deletions
diff --git a/src/lib.rs b/src/lib.rs
index ab40fa9..2ffe77e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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),
+ }
}