sapper_logger/
lib.rs

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    // info!()
22    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}