#[allow(unused_imports)]
use holochain_logging::prelude::*;
#[macro_export]
macro_rules! log_trace {
(target: $target:expr, $($arg:tt)+) => (
log!(target: $target, log::Level::Trace, $($arg)+);
);
($ctx:expr, $($arg:tt)+) => (
log!(target: &format!("holochain::{}", $ctx.get_instance_name()), log::Level::Trace, $($arg)+);
);
($($arg:tt)+) => (
log!(target: "holochain", log::Level::Trace, $($arg)+);
)
}
#[macro_export]
macro_rules! log_debug {
(target: $target:expr, $($arg:tt)+) => (
log!(target: $target, Level::Debug, $($arg)+);
);
($ctx:expr, $($arg:tt)+) => (
log!(target: &format!("holochain::{}", $ctx.get_instance_name()), log::Level::Debug, $($arg)+);
);
($($arg:tt)+) => (
log!(target: "holochain", Level::Debug, $($arg)+);
)
}
#[macro_export]
macro_rules! log_info {
(target: $target:expr, $($arg:tt)+) => (
log!(target: $target, log::Level::Info, $($arg)+);
);
($ctx:expr, $($arg:tt)+) => (
log!(target: &format!("holochain::{}", $ctx.get_instance_name()), log::Level::Info, $($arg)+);
);
($($arg:tt)+) => (
log!(target: "holochain", log::Level::Info, $($arg)+);
)
}
#[macro_export]
macro_rules! log_warn {
(target: $target:expr, $($arg:tt)+) => (
log!(target: $target, log::Level::Warn, $($arg)+);
);
($ctx:expr, $($arg:tt)+) => (
log!(target: &format!("holochain::{}", $ctx.get_instance_name()), log::Level::Warn, $($arg)+);
);
($($arg:tt)+) => (
log!(target: "holochain", log::Level::Warn, $($arg)+);
)
}
#[macro_export]
macro_rules! log_error {
(target: $target:expr, $($arg:tt)+) => (
log!(target: $target, log::Level::Error, $($arg)+);
);
($ctx:expr, $($arg:tt)+) => (
log!(target: &format!("holochain::{}", $ctx.get_instance_name()), log::Level::Error, $($arg)+);
);
($($arg:tt)+) => (
log!(target: "holochain", log::Level::Error, $($arg)+);
)
}
#[test]
fn context_log_macro_test() {
use crate::{context::Context, persister::SimplePersister};
use holochain_core_types::agent::AgentId;
use holochain_locksmith::RwLock;
use holochain_net::p2p_config::P2pConfig;
use holochain_persistence_file::{cas::file::FilesystemStorage, eav::file::EavFileStorage};
use holochain_tracing as ht;
use std::sync::Arc;
use tempfile::tempdir;
let file_storage = Arc::new(RwLock::new(
FilesystemStorage::new(tempdir().unwrap().path().to_str().unwrap()).unwrap(),
));
let ctx = Context::new(
"LOG-TEST-ID",
AgentId::generate_fake("Bilbo"),
Arc::new(RwLock::new(SimplePersister::new(file_storage.clone()))),
file_storage.clone(),
file_storage.clone(),
Arc::new(RwLock::new(
EavFileStorage::new(tempdir().unwrap().path().to_str().unwrap().to_string()).unwrap(),
)),
P2pConfig::new_with_unique_memory_backend(),
None,
None,
false,
Arc::new(RwLock::new(
holochain_metrics::DefaultMetricPublisher::default(),
)),
Arc::new(ht::null_tracer()),
);
use holochain_logging::prelude::*;
let _guard = FastLoggerBuilder::new()
.set_level_from_str("Trace")
.build()
.expect("Fail to init logger.");
log_info!(target: "holochain-custom-log-target", "Custom target '{}' log here.", "Debug");
log_trace!(ctx, "'{}' log level with Context target.", "Trace");
log_debug!(ctx, "'{}' log level with Context target.", "Debug");
log_info!(ctx, "'{}' log level with Context target.", "Info");
log_warn!(ctx, "'{}' log level with Context target.", "Warning");
log_error!(ctx, "'{}' log level with Context target.", "Error");
_guard.flush();
}