actix_web_middleware_slogger/
wrapper.rs

1#[cfg(feature = "log")]
2pub mod rust_log {
3    use crate::logger::Field;
4    use std::panic::Location;
5
6    pub fn log(
7        level: log::Level,
8        target: &str,
9        module_path: &'static str,
10        loc: &'static Location,
11        kv_fields: Vec<Field>,
12    ) {
13        let kvs: Vec<(&str, log::kv::Value)> = kv_fields
14            .iter()
15            .filter_map(|field| match field {
16                Field::KV(k, v) => match v {
17                    Some(v) => Some((k.as_str(), log::kv::Value::from_display(v))),
18                    None => Some((k.as_str(), log::kv::Value::null())),
19                },
20                _ => None,
21            })
22            .collect();
23        let kvs = kvs.as_slice();
24
25        let mut builder = log::Record::builder();
26
27        builder
28            .args(format_args!("access log"))
29            .level(level)
30            .target(target)
31            .module_path_static(Some(module_path))
32            .file_static(Some(loc.file()))
33            .line(Some(loc.line()))
34            .key_values(&kvs);
35
36        log::logger().log(&builder.build());
37    }
38}