use std::{sync::LazyLock};
use syslog_rs::formatters::DefaultSyslogFormatter;
use syslog_rs::{Syslog, SyQueued};
use syslog_rs::sync::DefaultQueueAdapter;
use syslog_rs::{LogFacility, LogStat, Priority};
use syslog_rs::AsyncSyslogQueueApi;
#[cfg(target_family = "unix")]
use syslog_rs::{SyslogLocal};
#[cfg(target_family = "windows")]
use syslog_rs::{WindowsEvent};
#[cfg(target_family = "unix")]
pub type DefaultLocalSyslogDestination = SyslogLocal;
#[cfg(target_family = "windows")]
pub type DefaultLocalSyslogDestination = WindowsEvent;
pub static SYSLOG: LazyLock<Syslog<DefaultSyslogFormatter, DefaultLocalSyslogDestination, SyQueued<DefaultQueueAdapter, DefaultSyslogFormatter, DefaultLocalSyslogDestination>>> =
LazyLock::new(||
{
#[cfg(target_family = "unix")]
let syslog_provider =
SyslogLocal::new();
#[cfg(target_family = "windows")]
let syslog_provider =
WindowsEvent::new();
Syslog
::<_, _, SyQueued<DefaultQueueAdapter, _, _>>
::openlog_with(
Some("example_sync_async"),
LogStat::LOG_CONS | LogStat::LOG_NDELAY | LogStat::LOG_PID,
LogFacility::LOG_DAEMON,
syslog_provider
)
.unwrap()
}
);
macro_rules! logdebug
{
($($arg:tt)*) => (
SYSLOG.syslog(Priority::LOG_DEBUG, format!($($arg)*).into()).unwrap()
)
}
macro_rules! alogdebug
{
($($arg:tt)*) => (
SYSLOG.a_syslog(Priority::LOG_DEBUG, format!($($arg)*).into()).await.unwrap()
)
}
#[tokio::main]
async fn main()
{
alogdebug!("message from async portion");
let handle =
tokio
::task
::spawn_blocking(
||
{
logdebug!("message from sync portion");
}
);
handle.await.unwrap();
return;
}