第一章 ns3-Logging(日志)系统

1Logging系统的出现:

    在程序设计的时候,我们一般都会在程序中输出一些所需要的信息。例如:在windos系统中,C++程序的输出结果一般用cout<<endl;而在我们的ns3中,则引入了一种新的输出标准就是Logging系统,用来反馈系统的运行情况(在大型的系统中,基本都会提供自己的程序消息记录方式)。当然,ns3相对于标准C++,还是有很多差异,我会分章节尽量为大家详细讲解。下面我们就来讲解一下日志系统的用法:

2. 日志的等级

       在NS-3当中,日志系统提供了七个级别的日志组件,可以在输出日志时选择相应的级别,那么在显示日志就可以控制日志的显示详细程度。这些级别由低到高依次为:

LOG_ERROR:记录错误信息

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也都能启用,而无需再次逐个激活。这就是累计日志。只需注册任意等级日志其低等级日志不用激活直接能启用。

       嘿嘿,宝子们本章结束,有不明白得大家可以留评论区探讨。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值