azure_functions/
logger.rs1use crate::{
2 rpc::{rpc_log, streaming_message::Content, RpcLog, StreamingMessage},
3 worker::Sender,
4};
5use log::{Level, Log, Metadata, Record};
6
7pub struct Logger {
8 level: Level,
9 sender: Sender,
10}
11
12impl Logger {
13 pub fn new(level: Level, sender: Sender) -> Logger {
14 Logger { level, sender }
15 }
16}
17
18impl Log for Logger {
19 fn enabled(&self, metadata: &Metadata) -> bool {
20 metadata.level() <= self.level
21 }
22
23 fn log(&self, record: &Record) {
24 if !self.enabled(record.metadata()) {
25 return;
26 }
27
28 let mut event = RpcLog {
29 level: match record.level() {
30 Level::Trace => rpc_log::Level::Trace,
31 Level::Debug => rpc_log::Level::Debug,
32 Level::Info => rpc_log::Level::Information,
33 Level::Warn => rpc_log::Level::Warning,
34 Level::Error => rpc_log::Level::Error,
35 } as i32,
36 message: record.args().to_string(),
37 ..Default::default()
38 };
39
40 event.invocation_id = crate::context::CURRENT.with(|c| c.borrow().invocation_id.clone());
41
42 self.sender
43 .unbounded_send(StreamingMessage {
44 content: Some(Content::RpcLog(event)),
45 ..Default::default()
46 })
47 .unwrap_or(());
48 }
49
50 fn flush(&self) {}
51}