#![cfg(all(target_family = "windows", feature = "build_with_thread_local"))]
extern crate syslog_rs;
use std::{cell::RefCell, time::Instant};
use syslog_rs::{LogFacility, LogStat, Priority, SyStreamPriDebug, WindowsEvent, sync::syslog_threadlocal::SingleSyslog};
#[test]
fn test_thread_signalling()
{
thread_local!
{
static SYSLOG: RefCell<SingleSyslog> =
RefCell::new(SingleSyslog::openlog_with(Some("test"), LogStat::LOG_PID ,
LogFacility::LOG_DAEMON, WindowsEvent::new()).unwrap());
}
let thread =
std::thread::spawn(move ||
{
for i in 0..10
{
let fmms = format!("test message {} from thread {:?}", i, std::thread::current().name());
let s = Instant::now();
SYSLOG
.with_borrow_mut(|syslog|
syslog
.syslog(
Priority::LOG_ERR,
fmms.into()
)
.unwrap()
);
let e = s.elapsed();
println!("{:?}", e);
}
}
);
SYSLOG
.with_borrow_mut(|syslog|
syslog
.syslog(
Priority::LOG_DEBUG,
format!("main test message from thread {:?}", std::thread::current().name()).into()
)
.unwrap()
);
thread.join().unwrap();
return;
}
#[test]
fn test_single_stream_test()
{
use std::fmt::Write;
let log =
SingleSyslog::openlog(
Some("test1"),
LogStat::LOG_CONS | LogStat::LOG_NDELAY | LogStat::LOG_PID,
LogFacility::LOG_DAEMON,
WindowsEvent::new());
assert_eq!(log.is_ok(), true, "{}", log.err().unwrap());
let mut log = log.unwrap();
write!(log.get_stream::<SyStreamPriDebug>(), "test stream singlesyslog").unwrap();
for i in 0..3
{
let s = Instant::now();
write!(log.get_stream::<SyStreamPriDebug>(), "test stream singlesyslog {}", i).unwrap();
let e = s.elapsed();
println!("{:?}", e);
}
}