Skip to main content

logging/
logging.rs

1use falcorn_sdk::LoggingClient;
2use falcorn_sdk::proto::logging::{
3    DEFAULT_LOG_SOCKET, PLUGIN_FILTER_ACCESS_LOG, PLUGIN_FILTER_ALL, PLUGIN_FILTER_LOG_MESSAGE,
4    PLUGIN_FILTER_METRICS,
5};
6use std::env;
7
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9    let socket = env::var("FALCORN_LOG_SOCKET").unwrap_or_else(|_| DEFAULT_LOG_SOCKET.to_string());
10    let token = env::var("FALCORN_LOG_TOKEN").ok();
11    let client_name = env::var("FALCORN_LOG_CLIENT").ok();
12    let filter = env::var("FALCORN_LOG_FILTER")
13        .ok()
14        .and_then(|value| value.parse::<u8>().ok())
15        .unwrap_or(PLUGIN_FILTER_ALL);
16
17    let mut builder = LoggingClient::builder(socket);
18    if let Some(token) = token {
19        builder = builder.auth_token(token);
20    }
21    if let Some(client_name) = client_name {
22        builder = builder.client_name(client_name);
23    }
24    builder = builder.filter_mask(filter);
25
26    let mut client = builder.connect()?;
27    println!(
28        "Connected. Filters: log={} access={} metrics={} (mask={:#04x})",
29        filter & PLUGIN_FILTER_LOG_MESSAGE != 0,
30        filter & PLUGIN_FILTER_ACCESS_LOG != 0,
31        filter & PLUGIN_FILTER_METRICS != 0,
32        filter
33    );
34
35    loop {
36        let event = client.next_event()?;
37        match event {
38            falcorn_sdk::proto::logging::PluginEvent::LogMessage {
39                ts_millis,
40                level,
41                pid,
42                worker_id,
43                message,
44            } => {
45                println!(
46                    "[{}] {} pid={} worker={:?} - {}",
47                    ts_millis,
48                    level.as_str(),
49                    pid,
50                    worker_id,
51                    message
52                );
53            }
54            falcorn_sdk::proto::logging::PluginEvent::AccessLog {
55                ts_millis,
56                remote,
57                method,
58                uri,
59                status,
60                duration_micros,
61                ..
62            } => {
63                println!(
64                    "[{}] {} {} {} status={} {}us",
65                    ts_millis, remote, method, uri, status, duration_micros
66                );
67            }
68            falcorn_sdk::proto::logging::PluginEvent::Metrics(metrics) => {
69                println!(
70                    "METRICS rps={:.2} success_rate={:.4} avg_us={} active_conn={}",
71                    metrics.requests_per_second,
72                    metrics.success_rate,
73                    metrics.avg_response_time_micros,
74                    metrics.active_connections
75                );
76            }
77        }
78    }
79}