From 53b5c00e625bf700a21be1a3e2070d3b23f1bef4 Mon Sep 17 00:00:00 2001 From: Yves Fischer Date: Sat, 3 Sep 2016 02:00:54 +0200 Subject: first test version --- rust/src/apachelog.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 rust/src/apachelog.rs (limited to 'rust/src/apachelog.rs') diff --git a/rust/src/apachelog.rs b/rust/src/apachelog.rs new file mode 100644 index 0000000..2517979 --- /dev/null +++ b/rust/src/apachelog.rs @@ -0,0 +1,45 @@ +///! Prints logging similar to apache http access.log +use std::net::IpAddr; +use conduit::{Request, Response}; +use time; + +pub struct LogEntry { + remote_ip_address: IpAddr, + remote_user: String, + request_path: String, + time: time::Tm, + status: u32, + response_size: u32, +} + +impl LogEntry { + pub fn start(req: &Request) -> LogEntry { + let entry = LogEntry { + remote_ip_address: req.remote_addr().ip(), + remote_user: String::new(), + request_path: String::from(req.path()), + time: time::now(), + status: 0, + response_size: 0, + }; + return entry + } + + pub fn done(&mut self, response: Response) -> Response { + let (status_code, _) = response.status; + self.status = status_code; + self.print(); + return response; + } + + #[inline(always)] + fn print(&self) { + println!("{} - {} - [{}] \"{}\" {} {}", + self.remote_ip_address, + self.remote_user, + time::strftime("%d/%b/%Y %T %z", &self.time).unwrap(), + self.request_path, + self.status, + self.response_size); + } +} -- cgit v1.2.1