Skip to content

Instantly share code, notes, and snippets.

@RandyMcMillan
Created March 3, 2025 13:08
Show Gist options
  • Save RandyMcMillan/5df8e1fdccc0cd0dadc2948cb3d5a801 to your computer and use it in GitHub Desktop.
Save RandyMcMillan/5df8e1fdccc0cd0dadc2948cb3d5a801 to your computer and use it in GitHub Desktop.
simple_logger.rs
use std::env;
use std::process;
use std::io::{self, Write};
enum LogLevel {
Error,
Warn,
Info,
Debug,
}
struct SimpleLogger {
level: LogLevel,
}
impl SimpleLogger {
fn new() -> Self {
let level = match env::var("MY_LOG_LEVEL").as_deref() {
Ok("error") => LogLevel::Error,
Ok("warn") => LogLevel::Warn,
Ok("info") => LogLevel::Info,
Ok("debug") => LogLevel::Debug,
_ => LogLevel::Info, // Default to info
};
SimpleLogger { level }
}
fn log(&self, level: LogLevel, message: &str) {
if self.should_log(&level) {
let mut output = match level {
LogLevel::Error => io::stderr(),
_ => io::stderr(),
};
let level_str = match level {
LogLevel::Error => "ERROR",
LogLevel::Warn => "WARN",
LogLevel::Info => "INFO",
LogLevel::Debug => "DEBUG",
};
let _ = writeln!(output, "[{}] {}", level_str, message);
}
}
fn should_log(&self, level: &LogLevel) -> bool {
match self.level {
LogLevel::Error => matches!(level, LogLevel::Error),
LogLevel::Warn => matches!(level, LogLevel::Error | LogLevel::Warn),
LogLevel::Info => matches!(level, LogLevel::Error | LogLevel::Warn | LogLevel::Info),
LogLevel::Debug => matches!(level, LogLevel::Error | LogLevel::Warn | LogLevel::Info | LogLevel::Debug),
}
}
fn error(&self, message: &str) {
self.log(LogLevel::Error, message);
}
fn warn(&self, message: &str) {
self.log(LogLevel::Warn, message);
}
fn info(&self, message: &str) {
self.log(LogLevel::Info, message);
}
fn debug(&self, message: &str) {
self.log(LogLevel::Debug, message);
}
}
const VERSION: &'static str = "v0.0.1";
fn main() {
let logger = SimpleLogger::new();
logger.debug("This is a debug message.");
logger.info("This is an info message.");
logger.warn("This is a warning message.");
logger.error("This is an error message.");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment