Error, logs and more

Belgium Rust user group

2018-04-17

Who am I?

Grummfy

Jonathan Van Belle

@Grummfy

@Grummfy@mamot.fr

me@grummfy.be

github.com/grummfy

 

Open source contributor: atoum, hoa ...
Rust meetup organizer

Error, logs and more

Error

  • error language vs error process
  • It's normal to have
  • Bad usage of the apps
  • Bad behaviours from the environment
  • Bad lib
  • Pop some mis-usage of your libs
  • ...

Logs

  • troubleshooting
  • performance
  • usage
  • audit
  • stats from it
  • ...

Logs

  • take place
  • usefull
  • try to be valuable

Logs

new connection

X just connect

[2018-04-17 18:22:25]new connection: X with a login and password on mobile

[2018-04-17 18:22:25]new connection: "X" with "credentials" on "mobile" ("Android 8.0.0 / ONEPLUS A500...")

[2018-04-17 18:22:25]new connection: {user} with {type} on {source} ({model}) - {"type": "credentials", "user": "H3fAh9bppeg=xuHy8woEtOfYYI18tLM76A==BKUvKCztSNl8", "source": "mobile", "model": "Android 8.0.0 / ONEPLUS A500..."}

[2018-04-17 18:22:25] [INFO]new connection: {user} with {type} on {source} ({model}) - {"type": "credentials", "user": "H3fAh9bppeg=xuHy8woEtOfYYI18tLM76A==BKUvKCztSNl8", "source": "mobile", "model": "Android 8.0.0 / ONEPLUS A500..."}

Logs

  • Standard
    • RFC 5424 => syslog
    • RFC 5426 => syslog over udp
    • ...
  • + habits
  • a lot of tools to deal with them
    • don't reinvent the wheel
      • syslog, rsyslog, logrotate, ELK, ...
    • speak to your sysadmin!

In rust

rust native - error

  • Error
  • !panic()
  • Option|Result .expect()
  • panic = 'abort' in Cargo.toml
  • RUST_BACKTRACE=1

rust native - error

fn main() {
    use std::error::Error;

    match "xc".parse::<u32>() {
        Err(e) => {
            println!("1. Error parsing some value: {}", e.description());
            eprintln!("2. Error parsing some value: {}", e.description());
        }
        _ => println!("No error"),
    }
}

Demo

rust native - log

  • output to screen
  • file
    • open a file
    • format a string
    • write it
    • close the file

Crates?

That's a lot!

Let's choose one

that's it!

Error - crates

  • simple-error
  • derive-error
  • yade
  • failure
  • error-chain
  • ...

Logs - crates

  • log
    • env_logger
      • pretty_env_logger
    • simplelog
    • stderrlog
    • flexi_logger
    • log4rs
  • ​slog

Demo

crate to choose?

  • error
    • error-chain or yade
  • log
    • sloggers for a desktop app
    • flexi_logger for general usage

Collecting

  • sentry: https://github.com/getsentry/sentry-rust
  • rollbar*: https://crates.io/crates/rollbar
  • bugsnag*: https://github.com/mehcode/bugsnag-rs
  • newrelic*: https://github.com/hjr3/newrelic-rs (abandoned)
  • probably more...

 

* = unofficial

Thanks

Questions?

demo https://gitlab.com/Grummfy/brug-2018-04-17_error_logs

Error, logs and more

By Jonathan Van Belle

Error, logs and more

How to manage error and display them through your logs? How to manage it? What's important? Libs to handle it... So let's discover it and speak about it.

  • 2,187