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:
cloudhead 2024-01-17 13:21:28 +01:00
parent 55d16ff2ae
commit ccc675b304
No known key found for this signature in database
4 changed files with 45 additions and 5 deletions

1
Cargo.lock generated
View File

@ -2613,6 +2613,7 @@ dependencies = [
name = "radicle-remote-helper"
version = "0.2.0"
dependencies = [
"log",
"radicle",
"radicle-cli",
"radicle-crypto",

View File

@ -7,7 +7,8 @@ edition = "2021"
build = "../build.rs"
[dependencies]
thiserror = "1"
thiserror = { version = "1" }
log = { version = "0.4.17" }
radicle-git-ext = { version = "0.7.0" }
[dependencies.radicle]

View File

@ -10,6 +10,9 @@ pub const GIT_HEAD: &str = env!("GIT_HEAD");
fn main() {
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 let Err(e) = version::print(std::io::stdout(), NAME, VERSION, GIT_HEAD) {
eprintln!("error: {e}");

View File

@ -5,13 +5,15 @@
#[cfg(feature = "test")]
pub mod test;
use std::io::{self, Write};
use std::io;
use std::io::Write;
use chrono::prelude::*;
use colored::*;
use log::{Level, Log, Metadata, Record, SetLoggerError};
struct Logger {
/// A logger that logs to `stdout`.
pub struct Logger {
level: Level,
}
@ -44,8 +46,38 @@ impl Log for Logger {
Level::Debug => message.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.
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_max_level(level.to_level_filter());