我使用的是slog 2.7。我正在寻找一种打印日志语句的源文件位置的方法。这里提供了一个使用env_logger的示例:Log source file and line numbers
下面提供了我当前的日志配置函数
pub fn configure_log(log_file_name: &str) -> slog::Logger {
println!(
"'{}' at configure_log(), log_file_name is:'{}'",
chrono::prelude::Utc::now(),
log_file_name
);
let log_file_path = std::path::Path::new(log_file_name);
let dir_file_path = log_file_path.parent().unwrap();
std::fs::create_dir_all(dir_file_path).unwrap();
let log_file_handler_option = std::fs::OpenOptions::new()
.create(true)
.write(true)
.truncate(true)
.open(log_file_name)
//.unwrap()
;
let log_file_handler = match log_file_handler_option {
Ok(f) => f,
Err(e) => {
println!("{}", e);
panic!();
}
};
let decorator = slog_term::TermDecorator::new().build();
let my_log_drain = slog_term::FullFormat::new(decorator).build().fuse();
let my_log_drain = slog_envlogger::new(my_log_drain);
//let my_log_drain = slog_async::Async::new(my_log_drain).build().fuse();
let my_log_drain = slog_async::Async::new(
slog::Duplicate::new(
slog::Filter::new(
slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(log_file_handler))
.build(),
|record: &slog::Record| record.level().is_at_least(slog::Level::Warning),
), //,slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(std::io::stdout())).build()
slog::Duplicate::new(
slog::Filter::new(
slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(
std::io::stderr(),
))
.build(),
|record: &slog::Record| record.level().is_at_least(slog::Level::Warning),
), //,slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(std::io::stdout())).build()
slog_term::FullFormat::new(slog_term::TermDecorator::new().build()).build(),
),
)
.fuse(),
)
.build()
.fuse();
slog::Logger::root(
my_log_drain,
slog::o!("n" => env!("CARGO_PKG_NAME"),"v" => env!("CARGO_PKG_VERSION")),
)
}发布于 2021-08-26 14:45:59
在@ Jmb的帮助下,下面是代码的编辑版本,它解决了我提出的问题。
pub fn configure_log(log_file_name: &str) -> slog::Logger {
println!(
"'{}' at configure_log(), log_file_name is:'{}'",
chrono::prelude::Utc::now(),
log_file_name
);
let log_file_path = std::path::Path::new(log_file_name);
let dir_file_path = log_file_path.parent().unwrap();
std::fs::create_dir_all(dir_file_path).unwrap();
let log_file_handler_option = std::fs::OpenOptions::new()
.create(true)
.write(true)
.truncate(true)
.open(log_file_name)
//.unwrap()
;
let log_file_handler = match log_file_handler_option {
Ok(f) => f,
Err(err) => {
println!("{:?}", err);
panic!("Unable to open the log file '{}', '{:?}'",log_file_name,err);
}
};
let decorator = slog_term::TermDecorator::new().build();
let my_log_drain = slog_term::FullFormat::new(decorator).build().fuse();
let my_log_drain = slog_envlogger::new(my_log_drain);
//let my_log_drain = slog_async::Async::new(my_log_drain).build().fuse();
let my_log_drain = slog_async::Async::new(
slog::Duplicate::new(
slog::Filter::new(
slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(log_file_handler))
.use_file_location()
.build(),
|record: &slog::Record| record.level().is_at_least(slog::Level::Warning),
), //,slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(std::io::stdout())).build()
slog::Duplicate::new(
slog::Filter::new(
slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(
std::io::stderr(),
))
.use_file_location()
.build(),
|record: &slog::Record| record.level().is_at_least(slog::Level::Warning),
), //,slog_term::FullFormat::new(slog_term::PlainSyncDecorator::new(std::io::stdout())).build()
slog_term::FullFormat::new(slog_term::TermDecorator::new().build()).use_file_location().build(),
),
)
.fuse(),
)
.build()
.fuse();
slog::Logger::root(
my_log_drain,
slog::o!("n" => env!("CARGO_PKG_NAME"),"v" => env!("CARGO_PKG_VERSION")),
)
}https://stackoverflow.com/questions/68812860
复制相似问题