tklog0.2.8—Rust高性能日志库

news/2024/12/14 15:35:36/
tklog是rust高性能结构化日志库,支持同步日志,异步日志,支持自定义日志的输出格式,支持按时间,按文件大小分割日志文件,支持日志文件压缩备份,支持官方日志库标准API,支持mod独立参数设置,支持日志level独立参数设置
  1. 简介
  2. Github地址
  3. 仓库地址
  4. rust日志库性能压测 — log4rs + tracing + tklog》

v0.2.8 更新内容

  • 增加 控制台日志独立格式化功能
  • 通过 set_console_body_fmt  可以设置日志内容在控制台的显示格式,与 set_body_fmt  类似,不同的是 set_body_fmt 对控制台信息与文件信息均有效。
  • 测试程序地址:  test_0_2_8.rs

示例:

rust">fn testlog2() {LOG.set_console(true).set_cutmode_by_size("028test2.log", 1 << 20, 0, false).set_level(LEVEL::Trace).set_attr_format(|fmt| {fmt.set_console_body_fmt(|level, body| {//处理body的末尾换行符let trimmed_body = if body.ends_with('\n') { format!("{}{}", body.as_str()[..body.len() - 1].to_string(), "\x1b[0m\n") } else { format!("{}{}", body, "\x1b[0m\n") };match level {LEVEL::Trace => format!("{}{}", "\x1b[34m", trimmed_body), //蓝色LEVEL::Debug => format!("{}{}", "\x1b[36m", trimmed_body), //青色LEVEL::Info => format!("{}{}", "\x1b[32m", trimmed_body),  //绿色LEVEL::Warn => format!("{}{}", "\x1b[33m", trimmed_body),  //黄色LEVEL::Error => format!("{}{}", "\x1b[31m", trimmed_body), //红色LEVEL::Fatal => format!("{}{}", "\x1b[41m", trimmed_body), //背景红LEVEL::Off => "".to_string(),}});fmt.set_body_fmt(|level, body| {//处理body的末尾换行符let trimmed_body = if body.ends_with('\n') { format!("{}{}", body.as_str()[..body.len() - 1].to_string(), "\x1b[0m\n") } else { format!("{}{}", body, "\x1b[0m\n") };match level {LEVEL::Trace => format!("{}{}", "\x1b[44m", trimmed_body), //背景蓝色LEVEL::Debug => format!("{}{}", "\x1b[46m", trimmed_body), //背景青色LEVEL::Info => format!("{}{}", "\x1b[42m", trimmed_body),  //背景绿色LEVEL::Warn => format!("{}{}", "\x1b[43m", trimmed_body),  //背景黄色LEVEL::Error => format!("{}{}", "\x1b[41m", trimmed_body), //背景红色LEVEL::Fatal => format!("{}{}", "\x1b[45m", trimmed_body), //背景紫色LEVEL::Off => "".to_string(),}});});trace!("trace!", "this is sync log");debug!("debug!", "this is sync log");info!("info!", "this is sync log");warn!("warn!", "this is sync log");error!("error!", "this is sync log");fatal!("fata!", "this is sync log");thread::sleep(Duration::from_secs(1))
}

说明:示例对控制台日志进行独立设置

输出结果

控制台日志输出:

文件日志输出:

可以看到,当 调用 set_console_body_fmt  设置控制台日志时,控制台与文件将分别输出设置的日志格式。


tklog 快速使用

安装tklog

方法一:使用 cargo add 命令

cargo add tklog

方法二:手动编辑 Cargo.toml

tklog = "0.2.8"

测试用例

rust">use tklog::{trace,debug, error, fatal, info,warn}
fn testlog() {trace!("trace>>>>", "aaaaaaaaa", 1, 2, 3, 4);debug!("debug>>>>", "bbbbbbbbb", 1, 2, 3, 5);info!("info>>>>", "ccccccccc", 1, 2, 3, 5);warn!("warn>>>>", "dddddddddd", 1, 2, 3, 6);error!("error>>>>", "eeeeeeee", 1, 2, 3, 7);fatal!("fatal>>>>", "ffffffff", 1, 2, 3, 8);
}

tklog性能

Tklog 有极高的性能,特别是在linux环境中,具体测试参考文章

  • 《记录tklog压测结果》
  • 《Rust日志库性能压测 — log4rs + tracing + tklog》

在linux环境中,tklog比同类型的日志库性能高10倍以上,在windows环境中,性能则为同类型日志库2倍左右

详细使用方法请参考 readme.md


http://www.ppmy.cn/news/1555050.html

相关文章

网络原理初识一>网络基本的概念, 网络如何转发

目录&#xff1a; 一.网络基本的概念&#xff1a; 二. 封装和分用 (网络转发)&#xff1a; 一.网络基本的概念&#xff1a; 1..局域网 (LAN)&#xff1a; 局域网&#xff0c;即 Local Area Network&#xff0c;简称LAN。 Local 即标识了局域网是本地&#xff0c;局部组建的…

Golang学习笔记_08——For循环

Golang学习笔记_05——延迟调用 Golang学习笔记_06——变量和常量 Golang学习笔记_07——基本类型 文章目录 For循环1. 基本形式2. 省略形式3. While循环4. 无限循环5. 使用 range 进行迭代 源码 For循环 在Go语言中&#xff0c;for 循环是唯一的一种循环结构&#xff0c;它非…

chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。

上一节中&#xff0c;实现了先生成一个固定背景的与音频长度一致的视频&#xff0c;然后插入字幕。再合并成一个视频的方法。 但是&#xff1a;这样有点单了&#xff0c;所以&#xff1a; 1.根据字幕的长度先生成视频片断 2.在片段上加上字幕。 3.合并所有片断&#xff0c;…

.NET(C#) 如何配置用户首选项及保存用户设置

最近开发软件&#xff0c;需要将用户设置保存下来以便下次打开后再用&#xff0c;看了半天原来.NET框架自带setting功能。记录如下&#xff1a; 一&#xff0c;“设置” 页面 使用项目设计器的“设置”页指定项目的应用程序设置。 通过应用程序设置&#xff0c;能够为应用程序…

如何切换安卓手机ip?你更喜欢哪种操作

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;对于网络访问和隐私保护至关重要。有时&#xff0c;可能出于个人需求或工作缘故&#xff0c;想要将自己的安卓手机IP地址更换成其他省份的&#xff0c;或者设置成静态IP等需求该如何实现呢&#xff1f;安卓手…

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …

深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式

数据库 深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式一、SQLite 数据库全方位解析(一)创建与基本操作(二)数据存储与表结构设计(三)数据操作:增删改查(四)与 C 语言联合使用(五)防止 SQL 注入二、Redis 数据库深度剖析(一)数据存储类型与独特结构(…

pstree 查看进程树 命令学习

使用Centos7.6 系统 使用yum安装 使用 yum -y install pstree 下载时会报错&#xff0c;因为 pstree 命令的包名不是这个&#xff0c;使用 yum provides pstree 可以查看pstree属于哪个包&#xff0c;然后安装它。 Loaded plugins: fastestmirror Repository epel is listed mo…