rconsole 1.1.0

A WebSocket-based logging library for Rust - send structured logs to NConsole desktop app
Documentation
//! Example: Send real logs to NConsole server
//!
//! Run with: cargo run --example real_test

use rconsole::*;
use serde_json::json;

#[derive(serde::Serialize, Debug)]
struct User {
    name: String,
    age: u32,
    email: String,
}

fn main() {
    // Connect to NConsole server
    NConsole::set_uri("10.10.61.192");
    NConsole::set_enable(true);

    println!("Sending logs to ws://10.10.61.192:9090 ...");

    // Basic log types
    nlog!("Hello from Rust! 🦀");
    ninfo!("Server started on port", 8080);
    nwarn!("Memory usage:", 85.5, "%");
    nerror!("Connection timeout", json!({"code": 504, "retry": true}));

    // Mixed types
    nlog!("Mixed types:", 42, true, 3.14, json!({"key": "value"}));

    // Struct logging
    let user = User {
        name: "Alex".into(),
        age: 25,
        email: "alex@example.com".into(),
    };
    nlog!("User logged in:", user);

    // Group logging
    ngroup!("HTTP Request #1234");
    nlog!("Method:", "GET");
    nlog!("Path:", "/api/users");
    nlog!("Status:", 200, "OK");
    nlog!("Duration:", 42, "ms");
    ngroup_end!();

    // Collapsed group
    ngroup_collapsed!("Response Body");
    nlog!(json!({
        "users": [
            {"name": "Alex", "age": 25},
            {"name": "Bob", "age": 30},
        ],
        "total": 2,
        "page": 1
    }));
    ngroup_end!();

    // Nested groups
    ngroup!("Database Operations");
    nlog!("Connected to PostgreSQL");

    ngroup_collapsed!("Query #1");
    nlog!("SELECT * FROM users WHERE active = true");
    nlog!("Rows:", 42, "Duration:", 12, "ms");
    ngroup_end!();

    ngroup_collapsed!("Query #2");
    nlog!("INSERT INTO logs (action, timestamp) VALUES (?, ?)");
    nlog!("Affected rows:", 1);
    ngroup_end!();

    ngroup_end!();

    // Styled log (CSS styling for NConsole)
    nlog!(
        "%cSuccess!",
        "color: green; font-size: 20px; font-weight: bold"
    );

    // Wait for messages to be sent
    std::thread::sleep(std::time::Duration::from_secs(1));
    println!("Done! Check NConsole app.");
}