Turned this into a basic and simple logging system for now.
Currently the library will handle using the log macros to directly call println!(). Later this can be set to actually log the errors.
This commit is contained in:
parent
38b626070a
commit
200be2c0db
15
examples/logging.rs
Normal file
15
examples/logging.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate scribe;
|
||||||
|
|
||||||
|
|
||||||
|
use scribe::*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pub fn main()
|
||||||
|
{
|
||||||
|
error!("There was an error!");
|
||||||
|
warn!("Danger Will Robinson, danger!");
|
||||||
|
info!("Jason is awesome.");
|
||||||
|
debug!("This seemed to work alright.");
|
||||||
|
}
|
15
src/entry.rs
15
src/entry.rs
@ -1,15 +0,0 @@
|
|||||||
use super::location::Location;
|
|
||||||
|
|
||||||
|
|
||||||
pub struct Entry
|
|
||||||
{
|
|
||||||
pub location: Location
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Entry
|
|
||||||
{
|
|
||||||
pub fn new(loc: Location) -> Entry
|
|
||||||
{
|
|
||||||
Entry {location: loc}
|
|
||||||
}
|
|
||||||
}
|
|
30
src/lib.rs
30
src/lib.rs
@ -5,34 +5,8 @@
|
|||||||
|
|
||||||
// Define the modules that are a
|
// Define the modules that are a
|
||||||
// part of this library.
|
// part of this library.
|
||||||
|
mod log_level;
|
||||||
mod macros;
|
mod macros;
|
||||||
pub mod library_info;
|
|
||||||
pub mod log_level;
|
|
||||||
pub mod location;
|
|
||||||
pub mod entry;
|
|
||||||
pub mod logger;
|
|
||||||
|
|
||||||
// Pull certain module items to the
|
|
||||||
// fore front of the crate.
|
|
||||||
pub use self::logger::Logger;
|
|
||||||
pub use self::log_level::LogLevel;
|
pub use self::log_level::LogLevel;
|
||||||
|
|
||||||
|
|
||||||
// Define the Macros this library provides and uses.
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! write_to_log
|
|
||||||
{
|
|
||||||
() =>
|
|
||||||
{
|
|
||||||
println!("{2:?} {0:?} {1:?}", file!(), line!(), module_path!());
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! message
|
|
||||||
{
|
|
||||||
() =>
|
|
||||||
{
|
|
||||||
write_to_log!();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
/// The full, displayable, name of the program.
|
|
||||||
pub const NAME: &'static str = "Scribe";
|
|
||||||
|
|
||||||
/// A simple name for this program that can be used
|
|
||||||
/// more easily than the displayable name.
|
|
||||||
pub const SIMPLE_NAME: &'static str = "Scribe";
|
|
||||||
|
|
||||||
/// The version of the library.
|
|
||||||
pub const VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
|
||||||
|
|
||||||
/// The directory name to use for this program.
|
|
||||||
/// This is most useful for dealing with logging.
|
|
||||||
pub const DIRECTORY_NAME: &'static str = "scribe";
|
|
@ -1,21 +0,0 @@
|
|||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct Location
|
|
||||||
{
|
|
||||||
///
|
|
||||||
pub module_path: &'static str,
|
|
||||||
|
|
||||||
///
|
|
||||||
pub file: &'static str,
|
|
||||||
|
|
||||||
///
|
|
||||||
pub line: u32
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Location
|
|
||||||
{
|
|
||||||
pub fn new(mod_loc: &'static str, file_loc: &'static str, line_loc: u32)
|
|
||||||
-> Location
|
|
||||||
{
|
|
||||||
Location {module_path: mod_loc, file: file_loc, line: line_loc}
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,12 +2,11 @@ use std::fmt;
|
|||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#[repr(u8)]
|
||||||
#[derive(Clone, Copy, Eq, Debug)]
|
#[derive(Clone, Copy, Eq, Debug)]
|
||||||
pub enum LogLevel
|
pub enum LogLevel
|
||||||
{
|
{
|
||||||
/// Nothing will be written to the logs.
|
|
||||||
OFF,
|
|
||||||
|
|
||||||
/// Only errors will be written to the logs.
|
/// Only errors will be written to the logs.
|
||||||
///
|
///
|
||||||
/// This designates a serious, program
|
/// This designates a serious, program
|
||||||
@ -22,32 +21,30 @@ pub enum LogLevel
|
|||||||
/// from running.
|
/// from running.
|
||||||
WARN,
|
WARN,
|
||||||
|
|
||||||
/// Messages, warnings, and errors will be
|
/// Info, warnings, and errors will be
|
||||||
/// written to the logs.
|
/// written to the logs.
|
||||||
///
|
///
|
||||||
/// Designates useful information
|
/// Designates useful information
|
||||||
MESSAGE,
|
INFO,
|
||||||
|
|
||||||
/// Debug statements, messages, warnings,
|
/// Debug statements, info, warnings,
|
||||||
/// and errors will be written to the logs.
|
/// and errors will be written to the logs.
|
||||||
DEBUG,
|
|
||||||
|
|
||||||
///
|
///
|
||||||
TRACE
|
/// Designates debugging information.
|
||||||
|
DEBUG,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl LogLevel
|
impl LogLevel
|
||||||
{
|
{
|
||||||
pub fn from_u8(lvl: u8) -> Option<LogLevel>
|
pub fn from_u8(lvl: u8) -> Option<LogLevel>
|
||||||
{
|
{
|
||||||
match lvl
|
match lvl
|
||||||
{
|
{
|
||||||
0 => Some(LogLevel::OFF),
|
0 => Some(LogLevel::ERROR),
|
||||||
1 => Some(LogLevel::ERROR),
|
1 => Some(LogLevel::WARN),
|
||||||
2 => Some(LogLevel::WARN),
|
2 => Some(LogLevel::INFO),
|
||||||
3 => Some(LogLevel::MESSAGE),
|
3 => Some(LogLevel::DEBUG),
|
||||||
4 => Some(LogLevel::DEBUG),
|
|
||||||
5 => Some(LogLevel::TRACE),
|
|
||||||
_ => None
|
_ => None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,12 +64,10 @@ impl Display for LogLevel
|
|||||||
{
|
{
|
||||||
match *self
|
match *self
|
||||||
{
|
{
|
||||||
LogLevel::OFF => write!(f, "Off"),
|
|
||||||
LogLevel::ERROR => write!(f, "Error"),
|
LogLevel::ERROR => write!(f, "Error"),
|
||||||
LogLevel::WARN => write!(f, "Warn"),
|
LogLevel::WARN => write!(f, "Warn"),
|
||||||
LogLevel::MESSAGE => write!(f, "Message"),
|
LogLevel::INFO => write!(f, "Info"),
|
||||||
LogLevel::DEBUG => write!(f, "Debug"),
|
LogLevel::DEBUG => write!(f, "Debug"),
|
||||||
LogLevel::TRACE => write!(f, "Trace")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
use super::log_level::LogLevel;
|
|
||||||
|
|
||||||
|
|
||||||
pub struct Logger
|
|
||||||
{
|
|
||||||
log_level: LogLevel
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
impl Logger
|
|
||||||
{
|
|
||||||
pub fn new(lvl: LogLevel) -> Logger
|
|
||||||
{
|
|
||||||
Logger{log_level: lvl}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_log_level(&self) -> LogLevel
|
|
||||||
{
|
|
||||||
match self.log_level
|
|
||||||
{
|
|
||||||
LogLevel::OFF => LogLevel::OFF,
|
|
||||||
LogLevel::ERROR => LogLevel::ERROR,
|
|
||||||
LogLevel::WARN => LogLevel::WARN,
|
|
||||||
LogLevel::MESSAGE => LogLevel::MESSAGE,
|
|
||||||
LogLevel::DEBUG => LogLevel::DEBUG,
|
|
||||||
LogLevel::TRACE => LogLevel::TRACE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_log_level(&mut self, lvl: LogLevel)
|
|
||||||
{
|
|
||||||
self.log_level = lvl
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +1,74 @@
|
|||||||
//#[docs(hidden)]
|
#[doc(hidden)]
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! log
|
macro_rules! log
|
||||||
{
|
{
|
||||||
($log_level: expr, $($args: tt)*) =>
|
($log_level: expr, $($arg: tt)+) =>
|
||||||
({
|
({
|
||||||
let log_entry: Entry;
|
let file_path: &std::path::Path;
|
||||||
let desired_log_level: LogLevel;
|
let mut file_name: &str;
|
||||||
//let current_log_level: LogLevel;
|
|
||||||
|
|
||||||
log_entry = Entry::new(Location::new(module_path!(), file!(), line!()));
|
file_name = file!();
|
||||||
desired_log_level = $log_level;
|
file_path = std::path::Path::new(file!());
|
||||||
|
match file_path.file_name()
|
||||||
|
{
|
||||||
|
Some(name) =>
|
||||||
|
{
|
||||||
|
match name.to_str()
|
||||||
|
{
|
||||||
|
Some(string) =>
|
||||||
|
{
|
||||||
|
file_name = string;
|
||||||
|
}
|
||||||
|
|
||||||
println!("{0}: {1}(line: {2})",
|
None =>
|
||||||
log_entry.location.module_path,
|
{
|
||||||
log_entry.location.file,
|
}
|
||||||
log_entry.location.line);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None =>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{0}: {1}::{2}::{3} -- {4}", $log_level,
|
||||||
|
module_path!(), file_name, line!(),
|
||||||
|
format_args!($($arg)+));
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! error
|
||||||
|
{
|
||||||
|
($($arg: tt)*) =>
|
||||||
|
{
|
||||||
|
log!(LogLevel::ERROR, $($arg)*);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! warn
|
||||||
|
{
|
||||||
|
($($arg: tt)*) =>
|
||||||
|
{
|
||||||
|
log!(LogLevel::WARN, $($arg)*);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! info
|
||||||
|
{
|
||||||
|
($($arg: tt)*) =>
|
||||||
|
{
|
||||||
|
log!(LogLevel::INFO, $($arg)*);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! debug
|
||||||
|
{
|
||||||
|
($($arg: tt)*) =>
|
||||||
|
{
|
||||||
|
log!(LogLevel::DEBUG, $($arg)*);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,14 +1,8 @@
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate scribe;
|
extern crate scribe;
|
||||||
|
|
||||||
use scribe::LogLevel;
|
|
||||||
use scribe::location::Location;
|
|
||||||
use scribe::entry::Entry;
|
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn test_log_call()
|
pub fn test_blank()
|
||||||
{
|
{
|
||||||
//log!(LogLevel::ERROR, "Test");
|
|
||||||
write_to_log!()
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user