Giter Club home page Giter Club logo

slog_unwraps's Introduction

slog_unwraps Build Status docs code size Build Status Project Status: Active โ€“ The project has reached a stable, usable state and is being actively developed.

Syntactic sugar to slog an error before unwrapping. It will add caller file and line information to the log statement so you don't have to turn on RUST_BACKTRACE to see what went wrong, but know that that only makes sense in debug mode. In release mode this information will either be missing or unreliable.

At first I had an expects function as well to be able to add context, but I really think you should use the failure crate, which provides a context method on errors, and it's much cleaner, so expects no longer exists. If you don't want to use failure, you will have to make sure your errors display sensible messages.

Example

run with 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!() }
   };
}

License: Unlicense

slog_unwraps's People

Contributors

najamelan avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

slog_unwraps's Issues

Make available the facilities to use a panic hook

In order to make sure all panics get logged, a panic hook needs to be set. However there can only be one panic hook in an application, so it should be consciously set by the application dev and not libraries.

Require the user to pass in a statically available slog instance, probably with the help of slog_scope. Then provide the panic hook, so the user can call something like:
std::panic::set_hook( slog_unwraps::panic_hook( global_slog ) );

and be done with it.

blocked on #1

Create exits, which just logs and exits, but not panics

This can be usefull if you just want to exit with an error, without panicking, as well as when you want to set up a panic hook that logs all panics, and when unwraps logs, you don't want to do that twice...

exits -> just takes log
exitc -> takes log, u8 exit code

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.