rust tracing 的实用实践

news/2024/12/22 1:03:38/文章来源:https://www.cnblogs.com/jiajie6591/p/18621602

1. 引子

最近想要迁移一部分java应用至rust,在实际体验了tklog,log4rs,和tracing三款流行的日志框架后,最后选用了tracing,log4rs的文件备份文件名没有时间,不便于管理,tklog的功能稍显简陋,在使用uselog()后会将某些底层包日志输出至终端,即使过滤掉某第三方个包(假设叫A)之后,这个包依赖的第三方包(A依赖的第三方包B)的日志依旧会被显示,但是tklog本身又无法显示包名,只能显示文件名,根本不知道这个日志是从哪个包漏出来的XD,最后在经历多次尝试后最终选定了使用最广泛的tracing!

2. 加入tracing包

log = "0.4" #使用log门面
tracing = "0.1" #本体
tracing-appender = { package = "tracing-appender-plus", version = "0.2", features = ["local-time",] } #滚动日志,package里的是文件滚动的增强,原版的只使用utc+0配置,非utc+0时区的日志时间文件名不正确。说一个好好笑的事情,这个问题存在3年了,有人提了issue给维护者了,维护者考虑再三说想用chrono的时间替代原来的,但是因为chrono好久没更新了,有个cve漏洞没修,所以就一直放着,一直不改,怎么说呢,没勺子不能用筷子吃饭吗?加一个手动设置时间偏移量的函数不行吗?ememem...
tracing-subscriber = { version = "0.3", features = ["time", "env-filter"] } #日志订阅,tracing默认不打印日志,需要订阅才会打印
time = { version = "0.3", features = ["macros"] } #时间包,用来格式化日志和终端的时间显示

3. 上代码

use time::macros::{format_description, offset};
use tracing_appender::{non_blocking::WorkerGuard, rolling::{RollingFileAppender, Rotation}};
use tracing_subscriber::{fmt::{time::OffsetTime, writer::MakeWriterExt}, EnvFilter};
pub fn tracing_init() -> (WorkerGuard, WorkerGuard) {//格式化时间let time_fmt =format_description!("[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]");//精确到毫秒let timer = OffsetTime::new(offset!(+8), time_fmt);//创建滚动日志let file_appender = RollingFileAppender::builder().rotation(Rotation::DAILY)//按天滚动.filename_prefix("service")//日志前缀.filename_suffix("log")//日志文件后缀名.max_log_files(30)//保留的日志最大数量.build("logs")//日志文件所在的文件夹,默认./的相对路径.expect("failed to initialize rolling file appender");//使用非阻塞输出let (stdout, guard1) = tracing_appender::non_blocking(std::io::stdout());//异步输出到stdoutlet (file, guard2) = tracing_appender::non_blocking(file_appender);//异步输出到文件tracing_subscriber::fmt().with_env_filter(EnvFilter::from("warn,actix_web1=debug,nacos_rust_client=info",))//这里可以自定义某些第三方库的日志是否打印,第一个是全局日志等级,后面的是自定义包.with_line_number(true)//显示行数.with_thread_ids(true)//显示线程id.with_ansi(false)//是否添加颜色信息,对于不支持颜色文本查看器日志文件会有乱码.with_timer(timer)//设置时间格式化样式.with_writer(file.and(stdout))//设置输出.init();//初始化(guard1, guard2)//一定要在主函数持有这两个异步缓冲区,否则无法输出
}

4. 参考文献

  1. https://probiecoder.cn/rust/tracing.html
  2. https://blog.csdn.net/qq_54714089/article/details/136717431

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WEB安全】web源码泄露漏洞

前言 在Web安全之中,可能大家对SQL注入、XSS跨站脚本攻击、文件上传一些漏洞已经耳熟于心了,这些漏洞可以对系统造成严重的风险,今天来看一个造成的风险完全不低于上述的漏洞,那就是源码泄露,而且web源码泄露在实际中并不少见,一些大的厂商也有可能存在这种风险。 常见的…

MySQL分页性能思考

MySQL分页性能思考 关键词:深度分页背景 最近有一个需求:在后台管理页面中,需要展示产品信息的列表。 之前版本开发中产品信息是用户填写完所有字段之后能进行保存。在之前的基础上需要支持用户不完全填写字段进行展示和保存的功能。 一个很简单的想法是为空也直接保存就可以…

【apache漏洞】 flink web漏洞复现

#CVE-2020-17519 #CVE-2020-17518 flink简介 Apache Flink 是高效和分布式的通用数据处理平台,由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎(简单来说,就是跟spark类似)。Flink 具有监控 API,可用于查询"正在运行的jobs…

ORM框架与数据库交互

title: ORM框架与数据库交互 date: 2024/12/22 updated: 2024/12/22 author: cmdragon excerpt: 对象关系映射(Object-Relational Mapping,ORM)框架是简化数据库与编程语言之间交互的强大工具。通过使用ORM,开发者可以避免直接编写SQL代码,便捷地执行CRUD操作,从而提高…

实验6 模板类,文件I/O和异常处理

一、实验目的练习编写模板函数,模板类,从多态角度理解模板函数和模板类(类型作为参数) 体验标准I/O流类,文件I/O流类,字符串I/O流类的用法,能正确使用 针对问题场景,使用流类库对I/O数据进行格式化和读写操作 体验异常处理的基础用法,能解释异常处理的机制和流程 训练…

【IM专题】服务治理,是在谈什么?

先说交通治理。 没有交通治理,会是怎样的场景?见下图。交通没有治理,车流效率会大大降低,尤其是在十字路口这种有资源竞争的路段,交通很容易陷入瘫痪。 如果引入交通治理,会是怎样的场景?见下图。交通治理,通过使用信号灯或是建造立交桥,在即使有资源冲突的路口段,通…

[题解]AtCoder Beginner Contest 385(ABC385) A~F

A - Equally 显然分组情况一定是\(1+1+1\)或\(1+2\),直接判定即可。点击查看代码 #include<bits/stdc++.h> using namespace std; int a,b,c; signed main(){cin>>a>>b>>c;if((a+b==c)||(a+c==b)||(b+c==a)||(a==b&&b==c)) cout<<"…

【AI+模型】RAG 架构图解:从基础到高级的7种模式

RAG 技术通过在 AI 生成过程中引入外部知识检索,从基础的文档查询发展到多模态、Multi-Agent 体协同的智能架构,让 AI 回答更准确、更全面。 核心组件 嵌入模型: 将文本转换为向量表示 生成模型: 负责最终的内容生成 重排序模型: 优化检索结果的相关性 向量数据库:…

浅聊web前端性能测试

最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~ 首先从用户的思维去思考,关于web前端性能,用户最看重的是什么...... 其实就是下面三个点:1. 加载性能(即页面加载时间+资源加载时间)2. …

使用magic-api实现增删改查分页

创建项目结构 pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apach…

【安全评审】“2024网络安全100强-行业应用”评分全流程细则

一 指标理解1.1 “行业应用”的核心优势是什么?1.2 评估维度有哪些?二、评审专家筛选2.1 对专家所在单位有什么要求?2.2 对专家所在行业有什么要求?2.3 对专家个人能力有什么要求?2.4 对专家组有什么要求?2.5 对专家个人价值观有什么要求?三、评分规则制定3.1 “典型案例…

《计算机组成及汇编语言原理》阅读笔记:p9-p27

《计算机组成及汇编语言原理》学习第 2 天,p9-p27 总结,总计 19 页。 一、技术总结 1.quantum physics(量子物理学) (1)quantum(量子) quantum的本意是:c. the smallest amount of sth(量子)。 In physics, a quantum is the minimum amount of any physical entity (physi…