daboross / fern

Simple, efficient logging for Rust
MIT License
848 stars 51 forks source link

Add line numbers in logs? #73

Closed JakkuSakura closed 4 years ago

JakkuSakura commented 4 years ago

Having line numbers like other languages would be nice to locate error when debugging, but I haven't seen any mention about line numbers.

Isn't it supported? (seems no "line" in the codebase)

daboross commented 4 years ago

This is supported! It's a native feature of the log crate, so there is no need for special code in fern to do it. Here's an example configuration using this:

    fern::Dispatch::new()
        .format(|out, message, record| {
            out.finish(format_args!(
                "{}[{}][{}][{}:{}] {}",
                chrono::Local::now().format("[%Y-%m-%d][%H:%M:%S]"),
                record.target(),
                record.level(),
                record.file().unwrap_or("unknown"),
                record.line().unwrap_or(0),
                message
            ))
        })
        .level(log::LevelFilter::Debug)
        .chain(std::io::stdout())
        .chain(fern::log_file("output.log")?)
        .apply()?;

This outputs logs like:

[2020-10-18][21:37:55][date_based_file_log][INFO][examples/date-based-file-log.rs:27] executing section: 0
[2020-10-18][21:37:55][date_based_file_log][DEBUG][examples/date-based-file-log.rs:29] section 0 1/4 complete.
[2020-10-18][21:37:55][date_based_file_log][DEBUG][examples/date-based-file-log.rs:31] section 0 1/2 complete.
[2020-10-18][21:37:55][date_based_file_log][DEBUG][examples/date-based-file-log.rs:33] section 0 3/4 complete.
[2020-10-18][21:37:55][date_based_file_log][INFO][examples/date-based-file-log.rs:35] section 0 completed!

I'd probably only show either target or file and not both since they're a bit redundant, but this should show the point. Let me know if that works!

To see all different metadata fields you can access like this, check the log::Record documentation.