use std::time::Duration;
use smol::{io, Timer};
use smol::lock::OnceCell;
use syslog_rs::sy_async::AsyncSyslog;
use syslog_rs::{LogFacility, LogStat, Priority};
#[cfg(target_family = "unix")]
use syslog_rs::{SyslogLocal};
#[cfg(target_family = "windows")]
use syslog_rs::{WindowsEvent};
pub static SYSLOG: OnceCell<AsyncSyslog> = OnceCell::new();
macro_rules! logdebug
{
($($arg:tt)*) => (
SYSLOG.get().unwrap().syslog(Priority::LOG_DEBUG, format!($($arg)*)).await
)
}
fn main() -> io::Result<()>
{
smol::block_on(
async
{
#[cfg(target_family = "unix")]
let syslog_provider =
SyslogLocal::new();
#[cfg(target_family = "windows")]
let syslog_provider =
WindowsEvent::new();
let syslog =
AsyncSyslog::openlog(
Some("smol_example"),
LogStat::LOG_CONS | LogStat::LOG_NDELAY | LogStat::LOG_PID,
LogFacility::LOG_DAEMON,
syslog_provider
)
.await
.unwrap();
SYSLOG.get_or_init(|| async { syslog }).await;
logdebug!("SMOL test message async start!");
SYSLOG.get().unwrap().vsyslog(Priority::LOG_DEBUG, "SMOL test 2").await;
Timer::after(Duration::from_micros(10)).await;
SYSLOG.get().unwrap().change_identity("SMOL_new_identity").await;
logdebug!("SMOL test message new identity!");
Timer::after(Duration::from_micros(10)).await;
logdebug!("SMOL test 123!");
logdebug!("SMOL test 123123! end ");
Ok(())
}
)
}