| // Licensed to the Apache Software Foundation (ASF) under one or more |
| // contributor license agreements. See the NOTICE file distributed with |
| // this work for additional information regarding copyright ownership. |
| // The ASF licenses this file to You under the Apache License, Version 2.0 |
| // (the "License"); you may not use this file except in compliance with |
| // the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| mod command; |
| |
| use crate::command::Commands; |
| use anyhow::Context; |
| use clap::Parser; |
| use tracing::metadata::LevelFilter; |
| use tracing_subscriber::FmtSubscriber; |
| |
| /// Args. |
| #[derive(Parser, Debug)] |
| #[clap(author, version, about, long_about = None)] |
| struct Args { |
| /// Log level. |
| #[clap(long, default_value = "INFO")] |
| log_level: LevelFilter, |
| |
| #[clap(subcommand)] |
| command: Commands, |
| } |
| |
| fn setup_log(args: &Args) -> anyhow::Result<()> { |
| let subscriber = FmtSubscriber::builder() |
| .with_max_level(args.log_level) |
| .finish(); |
| |
| tracing::subscriber::set_global_default(subscriber).context("setting default subscriber failed") |
| } |
| |
| fn main() -> anyhow::Result<()> { |
| let args = Args::parse(); |
| setup_log(&args)?; |
| args.command.run()?; |
| Ok(()) |
| } |