6个版本
0.1.5 | 2019年3月10日 |
---|---|
0.1.4 | 2019年3月9日 |
#741 in 调试
11KB
70 行
slog_unwraps
在解包之前记录错误的语法糖。它会在日志语句中添加调用者文件和行信息,这样你就不必打开RUST_BACKTRACE来查看发生了什么错误,但在调试模式下这才有意义。在发布模式下,这些信息可能不存在或不准确。
最初我有一个expects
函数来添加上下文,但我真的认为你应该使用failure
crate,它提供了错误上的context
方法,这要干净得多,所以expects
不再存在。如果你不想使用failure
,你将确保你的错误显示有意义的消息。
示例
运行cargo run --example basic
use
{
std :: { fs::File } ,
slog :: { Drain, Level, Logger, o, crit } ,
slog_term :: { FullFormat, PlainSyncDecorator } ,
slog_unwraps :: { ResultExt } ,
};
fn main()
{
let plain = PlainSyncDecorator::new( std::io::stderr() ) ;
let log = Logger::root( FullFormat::new( plain ).build().fuse(), o!() ) ;
// This will output (in one line, wrapped here for readablility):
//
// Mar 08 18:13:52.034 CRIT PANIC - fn `main` calls `unwraps` @ examples/basic.rs:20
// -> Error: No such file or directory (os error 2)
//
// and then will call unwrap for you
//
let f = File::open( "dont.exist" );
let _file = f.unwraps( &log );
// This is equivalent. Of course you can do something else with the result after logging
// rather than unwrapping. This only logs if the result is an error.
//
let g = File::open( "dont.exist" );
let _file = g.log( &log, Level::Critical ).unwrap();
// Without this crate, everytime you want to unwrap, you would write something like:
//
let h = File::open( "dont.exist" );
let _file = match h
{
Ok ( f ) => f,
Err( e ) => { crit!( log, "{}", e ); panic!() }
};
}
许可证:Unlicense
依赖项
~5–7MB
~127K SLoC