一、前言
日志对于开发大型应用来说是非常重要的组成部分,因为它可以帮助开发者定位错误。
毕竟大部分应用开发出来都是给其它用户使用的,一旦应用在用户电脑上触发了某个bug导致崩溃,你很难直接看出来bug的位置,这个时候就是日志发挥作用的时候了。
二、认识日志
日志听起来比较高级,实际上是一个非常简单的东西,就是打印字符而已。
比如最简单的日志,我们完成可以直接使用println
宏实现:
println!("info:main function")
只不过这样做缺陷太大,首先就是大多数时候我们都是希望可以分情况打印不同日志的。
比如下面这种情况:
fn divi(a: i32, b: i32) -> i32 {
println!("info:执行了divi函数");
if b == 0 {
println!("error:参数不能为0");
return 0;
}
return a / b;
}
该函数中写了两个打印语句,第一条只是一个提示信息,表明该函数被执行了,所以大多数时候我们可能并不需要它一直被打印,只是在某些特殊情况下,需要判断它是否被程序执行了才需要它打印一下看看情况。
而第二个打印语句就比较重要了,因为一旦程序执行到这个位置就代表这个函数执行出现了错误,这种情况按理来说只要出现了就一定需要被打印出来,方便开发者快速定位错误的位置。
为了满足这样的需求,正如我代码中写的info
、error
标识字符串一样,rust官方就为日志定义了五个日志级别:
error
:错误warn
:警告info
:提示debug
:调试trace
:跟踪
事实上并不仅仅只是rust中的日志,其它语言日志库基本都是这样做的。
上面五个等级从上到下级别依次递减,看其名字其实你大概也能看出这些日志应该在哪些地方被使用了。
三、基本使用
为了方便使用,rust官方就推出了一个标准的日志库log。