| 86 | } |
| 87 | |
| 88 | pub fn create(output: &str, debug: bool, trace: bool, log_level: &str) -> Self { |
| 89 | let output_type; |
| 90 | if output.eq_ignore_ascii_case("json") { |
| 91 | output_type = OutputType::Json; |
| 92 | } else if output.eq_ignore_ascii_case("shell") { |
| 93 | output_type = OutputType::Shell; |
| 94 | } else if output.eq_ignore_ascii_case("mixed") { |
| 95 | output_type = OutputType::Mixed; |
| 96 | } else { |
| 97 | output_type = OutputType::Logger; |
| 98 | } |
| 99 | match output_type { |
| 100 | OutputType::Logger | OutputType::Mixed => { |
| 101 | if env::var(DEFAULT_FILTER_ENV).unwrap_or_default().is_empty() { |
| 102 | let mut filter = if !log_level.is_empty() { |
| 103 | LevelFilter::from_str(log_level).unwrap_or(Info) |
| 104 | } else { |
| 105 | let mut filter = match debug { |
| 106 | true => Debug, |
| 107 | false => Info, |
| 108 | }; |
| 109 | if trace { |
| 110 | filter = Trace; |
| 111 | } |
| 112 | filter |
| 113 | }; |
| 114 | if trace { |
| 115 | filter = Trace |
| 116 | } |
| 117 | let target = if output_type == OutputType::Logger { |
| 118 | Stdout |
| 119 | } else { |
| 120 | Stderr |
| 121 | }; |
| 122 | env_logger::Builder::new() |
| 123 | .filter_module(env!("CARGO_CRATE_NAME"), filter) |
| 124 | .target(target) |
| 125 | .format_target(false) |
| 126 | .format_timestamp_millis() |
| 127 | .try_init() |
| 128 | .unwrap_or_default(); |
| 129 | } else { |
| 130 | env_logger::try_init().unwrap_or_default(); |
| 131 | } |
| 132 | } |
| 133 | _ => { |
| 134 | env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")) |
| 135 | .try_init() |
| 136 | .unwrap_or_default(); |
| 137 | } |
| 138 | } |
| 139 | |
| 140 | Logger { |
| 141 | debug, |
| 142 | trace, |
| 143 | output: output_type, |
| 144 | json: RefCell::new(JsonOutput { |
| 145 | logs: Vec::new(), |