parent
a246e5acb6
commit
ebe8966c26
2 changed files with 42 additions and 6 deletions
|
@ -6,10 +6,8 @@
|
|||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
|
||||
use clap::command;
|
||||
use clap::parser::ValueSource;
|
||||
use clap::value_parser;
|
||||
use clap::Arg;
|
||||
use clap::{command, value_parser, Arg};
|
||||
use color_eyre::eyre;
|
||||
use color_eyre::{Report, Result};
|
||||
use druid::AppLauncher;
|
||||
|
@ -19,6 +17,7 @@ use crate::controller::worker::work_thread;
|
|||
use crate::state::AsyncAction;
|
||||
use crate::state::{Delegate, State};
|
||||
use crate::ui::theme;
|
||||
use crate::util::log::LogLevel;
|
||||
|
||||
mod controller;
|
||||
mod state;
|
||||
|
@ -46,10 +45,22 @@ fn main() -> Result<()> {
|
|||
.value_parser(value_parser!(PathBuf))
|
||||
.default_value(default_config_path.to_string_lossy().to_string()),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("log-level")
|
||||
.long("log-level")
|
||||
.help("The maximum level of log events to print")
|
||||
.value_parser(value_parser!(LogLevel))
|
||||
.default_value("info"),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
let (log_tx, log_rx) = tokio::sync::mpsc::unbounded_channel();
|
||||
util::log::create_tracing_subscriber(log_tx);
|
||||
let level = if matches.value_source("log-level") == Some(ValueSource::DefaultValue) {
|
||||
None
|
||||
} else {
|
||||
matches.get_one::<LogLevel>("log-level").cloned()
|
||||
};
|
||||
util::log::create_tracing_subscriber(log_tx, level);
|
||||
|
||||
let (action_tx, action_rx) = tokio::sync::mpsc::unbounded_channel();
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use clap::ValueEnum;
|
||||
use tokio::sync::mpsc::UnboundedSender;
|
||||
use tracing_error::ErrorLayer;
|
||||
use tracing_subscriber::filter::FilterFn;
|
||||
|
@ -7,6 +8,28 @@ use tracing_subscriber::layer::SubscriberExt;
|
|||
use tracing_subscriber::prelude::*;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
#[derive(Clone, Copy, ValueEnum)]
|
||||
pub enum LogLevel {
|
||||
Trace,
|
||||
Debug,
|
||||
Info,
|
||||
Warn,
|
||||
Error,
|
||||
}
|
||||
|
||||
impl From<LogLevel> for EnvFilter {
|
||||
fn from(level: LogLevel) -> Self {
|
||||
let filter = match level {
|
||||
LogLevel::Trace => "error,dtmm=trace,sdk=trace",
|
||||
LogLevel::Debug => "error,dtmm=debug,sdk=debug",
|
||||
LogLevel::Info => "error,dtmm=info",
|
||||
LogLevel::Warn => "error,dtmm=warn",
|
||||
LogLevel::Error => "error",
|
||||
};
|
||||
EnvFilter::new(filter)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ChannelWriter {
|
||||
tx: UnboundedSender<Vec<u8>>,
|
||||
}
|
||||
|
@ -32,8 +55,10 @@ impl std::io::Write for ChannelWriter {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn create_tracing_subscriber(tx: UnboundedSender<Vec<u8>>) {
|
||||
let env_layer = if cfg!(debug_assertions) {
|
||||
pub fn create_tracing_subscriber(tx: UnboundedSender<Vec<u8>>, level: Option<LogLevel>) {
|
||||
let env_layer = if let Some(level) = level {
|
||||
EnvFilter::from(level)
|
||||
} else if cfg!(debug_assertions) {
|
||||
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"))
|
||||
} else {
|
||||
EnvFilter::new("error,dtmm=info")
|
||||
|
|
Loading…
Add table
Reference in a new issue