cli: Have a way of enabling logging in helper
Log to stderr if RUST_LOG is enabled in the remote helper.
This commit is contained in:
parent
55d16ff2ae
commit
ccc675b304
|
|
@ -2613,6 +2613,7 @@ dependencies = [
|
||||||
name = "radicle-remote-helper"
|
name = "radicle-remote-helper"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"log",
|
||||||
"radicle",
|
"radicle",
|
||||||
"radicle-cli",
|
"radicle-cli",
|
||||||
"radicle-crypto",
|
"radicle-crypto",
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ edition = "2021"
|
||||||
build = "../build.rs"
|
build = "../build.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
thiserror = "1"
|
thiserror = { version = "1" }
|
||||||
|
log = { version = "0.4.17" }
|
||||||
radicle-git-ext = { version = "0.7.0" }
|
radicle-git-ext = { version = "0.7.0" }
|
||||||
|
|
||||||
[dependencies.radicle]
|
[dependencies.radicle]
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ pub const GIT_HEAD: &str = env!("GIT_HEAD");
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut args = env::args();
|
let mut args = env::args();
|
||||||
|
|
||||||
|
if let Some(lvl) = radicle::logger::env_level() {
|
||||||
|
radicle::logger::set(radicle::logger::StderrLogger::new(lvl), lvl).ok();
|
||||||
|
}
|
||||||
if args.nth(1).as_deref() == Some("--version") {
|
if args.nth(1).as_deref() == Some("--version") {
|
||||||
if let Err(e) = version::print(std::io::stdout(), NAME, VERSION, GIT_HEAD) {
|
if let Err(e) = version::print(std::io::stdout(), NAME, VERSION, GIT_HEAD) {
|
||||||
eprintln!("error: {e}");
|
eprintln!("error: {e}");
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,15 @@
|
||||||
#[cfg(feature = "test")]
|
#[cfg(feature = "test")]
|
||||||
pub mod test;
|
pub mod test;
|
||||||
|
|
||||||
use std::io::{self, Write};
|
use std::io;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
use chrono::prelude::*;
|
use chrono::prelude::*;
|
||||||
use colored::*;
|
use colored::*;
|
||||||
use log::{Level, Log, Metadata, Record, SetLoggerError};
|
use log::{Level, Log, Metadata, Record, SetLoggerError};
|
||||||
|
|
||||||
struct Logger {
|
/// A logger that logs to `stdout`.
|
||||||
|
pub struct Logger {
|
||||||
level: Level,
|
level: Level,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,8 +46,38 @@ impl Log for Logger {
|
||||||
Level::Debug => message.dimmed(),
|
Level::Debug => message.dimmed(),
|
||||||
Level::Trace => message.white().dimmed(),
|
Level::Trace => message.white().dimmed(),
|
||||||
};
|
};
|
||||||
|
writeln!(&mut io::stdout(), "{message}").expect("write shouldn't fail");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
writeln!(io::stdout(), "{message}").expect("write shouldn't fail");
|
fn flush(&self) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A logger that logs to `stderr`.
|
||||||
|
pub struct StderrLogger {
|
||||||
|
level: Level,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StderrLogger {
|
||||||
|
pub fn new(level: Level) -> Self {
|
||||||
|
Self { level }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Log for StderrLogger {
|
||||||
|
fn enabled(&self, metadata: &Metadata) -> bool {
|
||||||
|
metadata.level() <= self.level
|
||||||
|
}
|
||||||
|
|
||||||
|
fn log(&self, record: &Record) {
|
||||||
|
if self.enabled(record.metadata()) {
|
||||||
|
let message = format!(
|
||||||
|
"{:<5} {:<8} {}",
|
||||||
|
record.level(),
|
||||||
|
record.target(),
|
||||||
|
record.args()
|
||||||
|
);
|
||||||
|
writeln!(&mut io::stderr(), "{message}").expect("write shouldn't fail");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,8 +86,11 @@ impl Log for Logger {
|
||||||
|
|
||||||
/// Initialize a new logger.
|
/// Initialize a new logger.
|
||||||
pub fn init(level: Level) -> Result<(), SetLoggerError> {
|
pub fn init(level: Level) -> Result<(), SetLoggerError> {
|
||||||
let logger = Logger { level };
|
set(Logger { level }, level)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set a logger.
|
||||||
|
pub fn set(logger: impl Log + 'static, level: Level) -> Result<(), SetLoggerError> {
|
||||||
log::set_boxed_logger(Box::new(logger))?;
|
log::set_boxed_logger(Box::new(logger))?;
|
||||||
log::set_max_level(level.to_level_filter());
|
log::set_max_level(level.to_level_filter());
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue