1use crate::{
3 helper::{Helper, HelperValue},
4 json,
5 parser::ast::Node,
6 render::{Context, Render},
7};
8
9use log::*;
10
11pub struct Log;
28
29impl Helper for Log {
30 fn call<'render, 'call>(
31 &self,
32 _rc: &mut Render<'render>,
33 ctx: &Context<'call>,
34 _template: Option<&'render Node<'render>>,
35 ) -> HelperValue {
36 ctx.arity(1..usize::MAX)?;
37
38 let message = ctx
39 .arguments()
40 .iter()
41 .map(|v| json::unquote(v))
42 .collect::<Vec<String>>()
43 .join(" ");
44
45 let level = ctx
46 .param("level")
47 .map(|v| v.as_str())
48 .unwrap_or(Some("info"))
49 .unwrap();
50
51 let lines = message.split("\n");
52 for line in lines {
53 match level {
54 "error" => error!("{}", line),
55 "debug" => debug!("{}", line),
56 "warn" => warn!("{}", line),
57 "trace" => trace!("{}", line),
58 _ => info!("{}", line),
59 }
60 }
61
62 Ok(None)
63 }
64}