1#[macro_use]
2extern crate log;
3
4use sapper::{Request, Result, Key};
5
6pub struct BasicLogger;
7impl Key for BasicLogger { type Value = u64; }
8
9pub fn init(req: &mut Request) -> Result<()> {
10
11 req.ext_mut().insert::<BasicLogger>(time::precise_time_ns());
12
13 Ok(())
14}
15
16pub fn splog(req: &Request, status: sapper::status::StatusCode) -> Result<()> {
17 let exit_time = time::precise_time_ns();
18 let entry_time = *req.ext().get::<BasicLogger>().unwrap();
19 let response_time_ms = (exit_time - entry_time) as f64 / 1000000.0;
20
21 let timedate = format!("[{}] ", time::now().strftime("%Y-%m-%d %H:%M:%S").unwrap());
23 let method = format!("{}", req.method());
24 let (path, query) = req.uri();
25 let response_time = format!("{} ms", response_time_ms);
26 info!("{} {} {} {:?} -> {} ({})", timedate, method, path, query, status, response_time);
27
28 Ok(())
29}
30
31
32#[cfg(test)]
33mod tests {
34 #[test]
35 fn it_works() {
36 }
37}