ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Rust 实现日记记载功能
[打印本页]
作者:
农妇山泉一亩田
时间:
2024-5-16 02:31
标题:
Rust 实现日记记载功能
目录
log 日记库尺度
简单示例
利用方法
库的开发者
应用开发者
日记库开发者
利用 log4rs
添加依赖
配置文件
运行项目
参考文章
log 日记库尺度
log
是 Rust 的日记门面库,由官方积极维护可以放心利用。它是Rust的日记门面,相应的日记 API 已成为事实上的尺度被其它日记框架所利用,有了日记门面开发者可以很方便切换自己的日记框架。
简单示例
创建一个名为 log_test 二进制项目:
cargo new log_test
复制代码
执行以下下令,引入 log 依赖:
cargo add log
复制代码
修改 main.rs 的代码如下:
use log::{info, warn,error,trace};
fn main() {
// 记录日志
info!("This is an info message");
warn!("This is a warning message");
error!("This is an error message");
trace!("This is an trace message");
}
复制代码
运行上面的示例,实际上看不到任何输出。因为
log 仅仅是日记门面库,它并不具备完整的日记库功能
!
利用方法
因为 log 仅仅是日记门面库,对于库和应用的开发者来说利用方法是有区别的,这也是 log 包这么设计的上风所在。
库的开发者
作为库的开发者,你只要在库中利用门面库即可,将具体的日记库交给用户去选择和绑定:
use log::{info, trace, warn};
pub fn deal_with_something() {
// 开始处理
// 记录一些日志
trace!("a trace log");
info!("a info long: {}", "abc");
warn!("a warning log: {}, retrying", err);
// 结束处理
}
复制代码
应用开发者
如果是应用开发者,就需要去选择一个具体的日记库了。
目前已经有了不少日记库实现,官方在
github
上也推荐了一些 ,主要分为以下几类:
简单的最小记载器,如 env_logger 等
复杂的可配置框架,如 log4rs 等
其他设施的适配器,如 syslog、db_logger 等
对于 WebAssembly 二进制文件:
console_log
对于动态库:需要
在日记上构造一个 FFI 安全包装器
,以便在库中举行初始化。
实用程序,如 alterable_logger 等
log 还提供了
set_logger
函数用于设置日记库,
set_max_level
用于设置最大日记级别。但是选用的具体日记库每每会提供更高级的 API,无需手动调用这两个函数。
日记库开发者
对于日记库开发者而言,自然要实现自己的 Log 特征:
use log::{Record, Level, Metadata};
struct SimpleLogger;
impl log::Log for SimpleLogger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= Level::Info
}
fn log(&self, record: &Record) {
if self.enabled(record.metadata()) {
println!("{} - {}", record.level(), record.args());
}
}
fn flush(&self) {}
}
复制代码
然后再main函数里面设置全局记载器:
use log::{SetLoggerError, LevelFilter};
static LOGGER: SimpleLogger = SimpleLogger;
pub fn init() -> Result<(), SetLoggerError> {
log::set_logger(&LOGGER)
.map(|()| log::set_max_level(LevelFilter::Info))
}
复制代码
运行后终端输出如下,因为设置日记等级为Info,所以没有输出Trace等级日记:
use log::{info, warn,error,trace};
fn main() {
//设置日志
init();
// 记录日志
info!("This is an info message");
warn!("This is a warning message");
error!("This is an error message");
trace!("This is an trace message");
}
复制代码
利用 log4rs
log4rs
是一个高度可配置的日记框架,以 Java 的 Logback 和 log4j 库为模型。
添加依赖
为项目添加
log4rs
依赖:
INFO - This is an info message
WARN - This is a warning message
ERROR - This is an error message
复制代码
配置文件
在项目根目录下,创建一个
log4rs.yaml
配置文件,并添加以下内容:
cargo add log4rs
复制代码
上面配置文件设定
日记输出到控制台、文件,文件按10 mb大小滚动,只保留最近五个文件
。各个配置字段的具体寄义可以参考
配置
:
refresh_rate
:用于确定 log4rs 扫描配置文件以查找更改的频率,如果发现更改,记载器将主动重新配置
appender
: 负责将日记收集到文件、控制台或系统日记, 可配置多个
stdout、rolling_file
:追加器的唯一标识字符串,自己随便定义,它的 kind 字段只支持
console
、
file
、
rolling_file
三种实现
encoder
: 负责将 log 信息转换为符合的格式, 如固定格式的平文本或
json
pattern
:编码模板,格式可配置,具体格式详见
pattern
policy
:计谋字段,计谋必须具有 kind 字段,
默认(且仅受支持)计谋为 kind: compound
trigger
:触发器字段用于指示何时滚动日记文件,支持
size
和
time
两种类型,这里利用的是按大小
运行项目
修改main.rs内容如下:
refresh_rate: 30 seconds
appenders:
stdout:
kind: console
encoder:
pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{l}] {t} - {m}{n}"
rolling_file:
kind: rolling_file
path: logs/test.log
append: true
encoder:
pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{l}] {t} - {m}{n}"
policy:
kind: compound
trigger:
kind: size
limit: 10 mb
roller:
kind: fixed_window
pattern: logs/test.{}.log
base: 1
count: 5
root:
level: info
appenders:
- stdout
- rolling_file
复制代码
运行结果:
use log::*;
use log4rs;
fn main() {
log4rs::init_file("log4rs.yaml", Default::default()).unwrap();
for i in 1..=1000 {
info!("This is loop iteration {}", i);
}
}
复制代码
参考文章
日记门面 log
Crate log
rust输出日记文件
[Rust Crate] log4rs Rust log 库
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4