Closed JakkuSakura closed 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.
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)