change(log): switch to fern

This commit is contained in:
Songtronix 2019-10-08 17:42:13 +02:00 committed by Songtronix
parent 8ef5709c1b
commit 7abf2a0fb9
2 changed files with 456 additions and 364 deletions

766
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -35,8 +35,8 @@ pub use crate::error::Error;
use crate::{audio::AudioFrontend, menu::main::MainMenuState, settings::Settings, window::Window};
use log::{self, debug, error, info};
use simplelog::{CombinedLogger, Config, TermLogger, TerminalMode, WriteLogger};
use std::{fs::File, mem, panic, str::FromStr};
use fern::colors::{Color, ColoredLevelConfig};
use std::{mem, panic, str::FromStr};
/// A type used to store state that is shared between all play states.
pub struct GlobalState {
@ -126,15 +126,47 @@ fn main() {
.and_then(|env| env.to_str().map(|s| s.to_owned()))
.and_then(|s| log::LevelFilter::from_str(&s).ok())
.unwrap_or(log::LevelFilter::Warn);
CombinedLogger::init(vec![
TermLogger::new(term_log_level, Config::default(), TerminalMode::Mixed).unwrap(),
WriteLogger::new(
log::LevelFilter::Info,
Config::default(),
File::create(&settings.log.file).unwrap(),
),
])
.unwrap();
let colors = ColoredLevelConfig::new()
.error(Color::Red)
.warn(Color::Yellow)
.info(Color::Cyan)
.debug(Color::Green)
.trace(Color::BrightBlack);
let base = fern::Dispatch::new();
//.level_for("hyper", log::LevelFilter::Warn)
//.level_for("tokio_reactor", log::LevelFilter::Warn);
let file_cfg = fern::Dispatch::new()
.level(log::LevelFilter::Debug)
.format(|out, message, record| {
out.finish(format_args!(
"{}[{}:{}][{}] {}",
chrono::Local::now().format("[%Y-%m-%d][%H:%M:%S]"),
record.target(),
record
.line()
.map(|x| x.to_string())
.unwrap_or("X".to_string()),
record.level(),
message
))
})
.chain(fern::log_file("voxygen.log").expect("Failed to create log file!"));
let stdout_cfg = fern::Dispatch::new()
.level(term_log_level)
.format(move |out, message, record| {
out.finish(format_args!(
"[{}] {}",
colors.color(record.level()),
message
))
})
.chain(std::io::stdout());
base.chain(file_cfg).chain(stdout_cfg).apply().expect("Failed to setup logging!");
// Set up panic handler to relay swish panic messages to the user
let settings_clone = settings.clone();