#slog #logging #panic #unwrap #log

slog_unwraps

在解包之前记录错误的语法糖

6个版本

0.1.5 2019年3月10日
0.1.4 2019年3月9日

#741 in 调试

Unlicense许可证

11KB
70

slog_unwraps 构建状态 docs 代码大小 构建状态 项目状态:活跃 – 项目已达到稳定、可用的状态,并正在积极开发。

在解包之前记录错误的语法糖。它会在日志语句中添加调用者文件和行信息,这样你就不必打开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