1Logging系统的出现:
在程序设计的时候,我们一般都会在程序中输出一些所需要的信息。例如:在windos系统中,C++程序的输出结果一般用cout<<endl;而在我们的ns3中,则引入了一种新的输出标准就是Logging系统,用来反馈系统的运行情况(在大型的系统中,基本都会提供自己的程序消息记录方式)。当然,ns3相对于标准C++,还是有很多差异,我会分章节尽量为大家详细讲解。下面我们就来讲解一下日志系统的用法:
2. 日志的等级
在NS-3当中,日志系统提供了七个级别的日志组件,可以在输出日志时选择相应的级别,那么在显示日志就可以控制日志的显示详细程度。这些级别由低到高依次为:
LOG_WARN:记录警告信息
LOG_DEBUG:记录一些不常见出现、奇怪的调试信息
LOG_INFO:记录程序相关的信息
LOG_FUNCTION:记录函数调用的信息
LOG_LOGIC:记录程序中执行流程的信息
LOG_ALL:显示任何级别的日志
除此之外,NS-3还提供了一种特殊的输出方式:NS_LOG_UNCOND。这种输出方式不会绑定到上述任何一个级别当中,只要所属组件的日志开启,不论当前显示哪个级别,都将输出日志信息。
3使用日志组件
3.1在ns3中定义(注册)一个日志组件
要想在ns3中输出日志信息,那么首先需要定义一个日志组件。其语法定义如下:
NS_LOG_COMPONENT_DEFINE("myFirstexample");
其中NS_LOG_COMPONENT_DEFINE是NS-3定义的一个宏,用于定义一个日志组件。
其作用就是向ns3系统注册一个名为 “myFirstexample”的记录组件。
3.2.激活第一个日志组件
在3.1当中,我们注册了一个日志组件,那么我们怎么去激活使用它呢?其语法如下:
LogComponentEnable("myFirstexample ", LOG_INFO);
这个语句激活了myFirstexample组件中的LOG_INFO级别的日志,具体使用如下。
3.3我们的第一个ns3日志案例
我们定义的一共三行代码:嘿嘿,看到Hello world是不是一种熟悉的感觉。
代码解读:这里的我所提到的行指的是最左边的数字行,后面都以此为标准。
第四行:NS_LOG_COMPONENT_DEFINE("myFirstexample");这句是注册组件
第九行:LogComponentEnable("myFirstexample ", LOG_INFO);激活组INFO级别的组件
有了这两行代码,日志输出就已经铺垫好可以独立输出一个日志了。
第10行:NS_LOG_INFO("Hello World"); //启用组件。相当于C++中cout<<”Hello World”<<endl;
只不过我们不能直接去用它,需要经过注册和激活组件后方可使用。
输出结果:
看输出结果第三行,Hello world和预想一样。
结论,想要输出某一个级别的日志需要三步,注册组件,激活组件,启用组件。
3.4第二个案例
那么当我们激活了INFO级别的日志,其他等级的日志能启用吗?
输出结果:
输出结果:xiao 4
由此可以看出激活INFO级别的日志,只能启用INFO级别的日志输出,其他级别的不激活相应级别的组件,启用则无效。
结论:激活一种级别的日志组件就只能启用那个级别的日志输出。
3.5特殊的输出案例
在2日志等级中,我们提到了一种特殊的NS_LOG_UNCOND日志输出:这种输出方式无需激活,直接能启用输出。
输出结果:
可以看出,我们虽然只激活了INFO等级日志组件,但是INFO和UNCOND都可以启用输出。
其他日志都需要三步:注册组件,激活组件,启用该组件级别输出
而NS_LOG_UNCOND只需要两步:注册,启用,无需激活。
4. 累计日志级别
累计日志级别也是由低到高七个等级和上面提到的七个等级对照:
LOG_ LEVEL_ERROR:记录错误信息
LOG_ LEVEL_WARN:记录警告信息
LOG_ LEVEL_DEBUG:记录一些不常见出现、奇怪的调试信息
LOG_ LEVEL_INFO:记录程序相关的信息
LOG_ LEVEL_FUNCTION:记录函数调用的信息
LOG_ LEVEL_LOGIC:记录程序中执行流程的信息
LOG_ LEVEL_ALL:显示任何级别的日志
那么他和上面的组件有什么不同呢?
上面我们提到无论使用哪个级别输出都需要三步走:注册,激活,启用
但是无论想启用哪个级别输出,都需要激活。
而累计原则是,我们激活相应等级日志组件,其低等级的日志也可以启用。
例如:我们激活了LOG_ LEVEL_INFO等级的组件,那么其低等级的日志LOG_ LEVEL_ERROR、LOG_ LEVEL_WARN、LOG_ LEVEL_DEBUG都可以启用,无需再激活。
4.1累计日志案例
输出结果:
在本案例中我们只激活了INFO级别的日志,但是其低等级的日志LOG_ LEVEL_ERROR、LOG_ LEVEL_WARN、LOG_ LEVEL_DEBUG也都能启用,而无需再次逐个激活。这就是累计日志。只需注册任意等级日志其低等级日志不用激活直接能启用。
嘿嘿,宝子们本章结束,有不明白得大家可以留评论区探讨。