13个版本
0.2.12 | 2023年6月9日 |
---|---|
0.2.10 | 2023年6月7日 |
0.1.45 | 2023年6月6日 |
在 调试 类别中排名第 210
每月下载 121 次
38KB
378 行
日志宏
该库为Rust项目提供简单灵活的日志系统。您可以使用宏记录不同类型的消息(错误、警告、信息、调试),并选择将消息记录到控制台、文件或两者同时记录。
特性
- 使用宏记录不同类型的消息(错误、警告、信息、调试)
- 选择是否将消息记录到控制台、文件或两者同时记录
- 在运行时设置日志级别
- 根据当前日期自动创建和追加日志文件
- 处理写入日志文件时的错误
用法
要将此库用于您的项目,请在您的 Cargo.toml
文件中将它添加为依赖项
[dependencies]
logger-rust = "0.2.12"
然后,导入库
use logger_rust::*;
现在,您可以使用 log_error!
、log_warn!
、log_info!
、log_debug
和 log_trace!
宏来记录不同类型的消息
fn main() {
log_error!("An error occurred: {}", "Something went wrong");
log_warn!("A warning occurred: {}", "Something might be wrong");
log_info!("An info message: {}", "Something happened");
log_debug!("A debug message: {}", "Something happened in detail");
}
log_trace! 示例
#[derive(Debug)]
struct Person {
name: String,
age: u8,
}
fn main() {
let my_struct = MyStruct;
my_struct.do_something();
log_trace!(my_struct.do_something());
let x = 5;
log_trace!(x);
let person = Person { name: "Alice".to_string(), age: 20 };
log_trace!(person, person.name);
}
输出
2023-06-09 15:06:46 [TRACE] src\main.rs:L23/C5 - used: my_struct.do_something() ->> (()): () | Type: <()> | ThreadId(1) ->> Timestamp: UN1686305206652692IX | Module: debug
2023-06-09 15:06:46 [TRACE] src\main.rs:L26/C5 - used: x ->> (5): 5 | Type: <i32> | ThreadId(1) ->> Timestamp: UN1686305206653039IX | Module: debug
2023-06-09 15:06:46 [TRACE] src\main.rs:L29/C5 - used: person ->> (Person { name: "Alice", age: 20 }): Person { name: "Alice", age: 20 } | Type: <debug::Person> | ThreadId(1) ->> Timestamp: UN1686305206653281IX ->> Context: <Alice> | Module: debug
默认情况下,日志消息将打印到控制台。您可以使用 set_log_level
函数指定日志消息的写入位置
use logger_rust::*;
fn main() {
set_log_level(LogLevel::Both);
// ...
}
set_log_level
函数接受一个 LogLevel 作为参数。您可以将以下变体之一传递给指定日志消息的写入位置
LogLevel::Console
:仅将日志消息打印到控制台。LogLevel::File
:仅将日志消息写入文件。LogLevel::Both
:将日志消息打印到控制台并写入文件。
当将消息记录到文件时,crate 将自动创建一个基于当前日期的新文件(例如,2023-06-04.log)或追加到具有相同名称的现有文件。如果在写入文件时发生错误(例如,如果文件不可访问),则将在控制台打印错误消息。
此外,您还可以设置自定义日志路径。默认路径与您的 Cargo.toml
文件所在的路径相同。set_log_path
函数接受一个 string
作为参数。您可以通过传递以下变体之一来指定日志消息应写入的位置
use logger_rust::*;
fn main() {
set_log_path(LogConfig::Path(LogPath::from("/path/to/log/dir")));
}
将在您指定的目录创建日志文件。
请注意,如果您使用 "." 作为目录(实际上并不必要),您将得到一个错误消息,因为目录已经忙。
日志轮换
从版本 1.0.39 开始,您可以创建一个 log rotator
实例,允许您根据大小和持续时间拆分日志。
- log_path: 日志目录的路径;
- max_size (
u64
): 日志文件的最大大小; - max_life (
std::time::Duration
): 日志文件的最大生命周期;
以下是一个示例
use logger_rust::*; // importing logger
use std::{
path::PathBuf,
time::Duration
};
fn main() {
set_log_path(LogConfig::Rotator(LogRotatorConfig::new(
PathBuf::from("C:/Users/JK/Desktop"), // path to the log directory
5 * 1024 * 1024, // 5 MB
Duration::from_secs(3600), // duration
)));
}
请注意,您不应在单个实例中使用 LogRotator 和 LogPath。这将阻塞日志文件。
示例
以下是一个示例,说明如何在 Rust 项目中使用此 crate
use logger_rust::*;
fn main() {
set_log_level(LogLevel::Both);
log_error!("An error occurred: {}", "Something went wrong");
log_warn!("A warning occurred: {}", "Something might be wrong");
log_info!("An info message: {}", "Something happened");
log_debug!("A debug message: {}", "Something happened in detail");
// ...
}
如果您愿意,您还可以添加 set_log_path(LogConfig::Path(LogPath::From("string")
方法
use logger_rust::*;
fn main() {
set_log_level(LogLevel::Both);
set_log_path(LogConfig::Path(LogPath::from("C:/Users/JK/Desktop"))); // will output logs on desktop
log_error!("An error occurred: {}", "Something went wrong");
log_warn!("A warning occurred: {}", "Something might be wrong");
log_info!("An info message: {}", "Something happened");
log_debug!("A debug message: {}", "Something happened in detail");
}
您也可以使用这个
error(¤t_time(), "An error message");
warn(¤t_time(), "A warning message");
info(¤t_time(), "An info message");
输出
- 2023-06-05 12:23:25 [ERROR] An error occurred: Something went wrong
- 2023-06-05 12:23:25 [WARN] A warning occurred: Something might be wrong
A warning occurred: Something might be wrong
+ 2023-06-05 12:23:25 [INFO] An info message: Something happened
An info message: Something happened
+ 2023-06-05 12:23:25 [DEBUG] A debug message: Something happened in detail
A debug message: Something happened in detail
自定义日志
从 0.1.2 版本开始,您可以使用宏创建自定义日志函数。
- 创建一个名为所需函数的
class
(例如,custom
)
pub fn custom(now: &str, message: &str) {
log_message("TRACE", now, message);
}
请注意,log_message 函数需要 3 个参数:now
、message
,但您可以使用任何您想要的。2. 为您创建的方法创建宏
#[macro_export]
macro_rules! log_custom {
($($arg:tt)*) => {{
let now = $crate::current_time(); // create a timestamp
$crate::trace(&now, &format!($($arg)*)); // output the timestamp with message
}}
}
请注意,arg
需要 2 个参数。3. 使用它
fn main() {
set_log_level(LogLevel::Both);
log_custom!("A custom log macros");
}
由于您有 fn custom
,您也可以使用这个
custom(¤t_time(), "A custom log");
它做的是一样的事情,但您可以用值代替 ¤t_time()
。但它需要 2 个参数
- 一个
&str
now
在我们的上下文中 - 一个包含消息的字符串值。
依赖关系
~1.2–2MB
~36K SLoC