fn try_init_logger()

in src/module.rs [257:304]


fn try_init_logger() -> anyhow::Result<()> {
    let log_level = ini_get::<Option<&CStr>>(SKYWALKING_AGENT_LOG_LEVEL)
        .and_then(|s| s.to_str().ok())
        .unwrap_or("OFF");
    let log_level = log_level.trim();

    let log_level = LevelFilter::from_str(log_level)?;
    if log_level == LevelFilter::OFF {
        return Ok(());
    }

    let log_file = ini_get::<Option<&CStr>>(SKYWALKING_AGENT_LOG_FILE)
        .and_then(|s| s.to_str().ok())
        .unwrap_or_default();
    let log_file = log_file.trim();
    if log_file.is_empty() {
        bail!("log file can't be empty when log enabled");
    }

    let path = Path::new(log_file);

    if let Some(parent) = path.parent() {
        fs::create_dir_all(parent)?;
    }

    let mut open_options = OpenOptions::new();
    open_options.append(true).create(true);

    let file = open_options.open(path)?;

    let filter = EnvFilter::new(format!(
        "info,skywalking_agent={log_level},skywalking_php_worker={log_level}"
    ));

    let subscriber = FmtSubscriber::builder()
        .with_env_filter(filter)
        .with_ansi(false)
        .with_writer(file)
        .with_timer(
            OffsetTime::local_rfc_3339()
                .unwrap_or_else(|_| OffsetTime::new(time::UtcOffset::UTC, Rfc3339)),
        )
        .finish();

    tracing::subscriber::set_global_default(subscriber)?;

    Ok(())
}