flowsnet_platform_sdk/
logger.rs

1use std::{
2    str::FromStr,
3    time::{SystemTime, UNIX_EPOCH},
4};
5use tracing_appender::rolling::{RollingFileAppender, Rotation};
6
7/// Initializes the logger.
8///
9/// This should be called early in the execution of a Rust program. Any log
10/// events that occur before initialization will be ignored.
11///
12pub fn init() {
13    let file_appender = RollingFileAppender::new(Rotation::DAILY, "/", "output.log");
14
15    fern::Dispatch::new()
16        .format(|out, message, record| {
17            let now = SystemTime::now();
18
19            let json = serde_json::json!({
20                "level": record.level().to_string(),
21                "target": record.target(),
22                "ts": now.duration_since(UNIX_EPOCH).unwrap_or_default().as_millis(),
23                "message": message
24            });
25            out.finish(format_args!(
26                "{}",
27                serde_json::to_string(&json).unwrap() + "\n"
28            ))
29        })
30        .level(
31            log::LevelFilter::from_str(
32                std::env::var("RUST_LOG")
33                    .unwrap_or(String::from("error"))
34                    .as_str(),
35            )
36            .unwrap_or(log::LevelFilter::Error),
37        )
38        .chain(Box::new(file_appender) as Box<dyn std::io::Write + Send>)
39        .apply()
40        .unwrap();
41}