actix_web_middleware_slogger/
wrapper.rs1#[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}