NS3为脚本运行创建日志LOG
来源:互联网 发布:梦泰软件教学 编辑:程序博客网 时间:2024/05/17 03:41
日志模块提供了直观的、相对简单的使用方法来帮助用户获得仿真过程的所需信息。
NS3也提供了一个一般性的记录机制,tracing,来获得仿真结果之外的数据(详情参见本教程的 tracing 系统的使用章节)。日志应当作为快速获得你的脚本和模型的调试信息、警告信息、错误信息、或是其他信息的首要选择。
在现有的系统中,有 7 个详尽程度递增的日志级别(级别越高内容越详细),他们分别是:
LOG_ERROR--------------------------->记录错误信息
LOG_WARN—-------------------------->记录警告信息
LOG_DEBUG---------------------------->记录调试信息
LOG_INFO-------------------------------->记录程序进展信息
LOG_FUNCTION--------------------------->记录每个调用函数信息
LOG_LOGIC--------------------------->记录每一个函数内部描述逻辑流程信息
LOG_ALL--------------------------->记录所有信息
我们也提供了一种一直被使用的无条件日志级别,它是跟日志详尽级别或是组件选择无关的:
LOG_UNCOND-------------------------->无条件记录信息
每一个级别能够被单独地被调用或逐级递增的被调用(高级别包括低级别)。日志的配置可以使用一个 shell 环境变量(NS_LOG),或是使用日志系统函数进行如examples/tutorial目录下的firct.cc的 LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
shell 环境变量(NS_LOG)
我们可以通过设置 NS_LOG 环境变量在不改变脚本或重新编译的情况下来增加日志级别,获得更多信息。
首先不对环境变量做任何要求运行脚本:
./waf --run scratch/myfirst
运行结果:
Waf: Entering directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'Waf: Leaving directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'Build commands will be stored in build/compile_commands.json'build' finished successfully (1.008s)At time 2s client sent 1024 bytes to 10.1.1.2 port 9At time 2.00369s server received 1024 bytes from 10.1.1.1 port 49153At time 2.00369s server sent 1024 bytes to 10.1.1.1 port 49153At time 2.00737s client received 1024 bytes from 10.1.1.2 port 9默认的是脚本里设置好的
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
设置日志为 LOG_LEVEL_INFO 级别。当我们传递一个日志级别标志时,我们实际上打开了这个日志级别和它之下的所有级别。本例中,我们打开了NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN 和 NS_LOG_ERROR 级别。可以看到只是显示了基本收发信息,信息内容不够多。
在shell界面,我是UBUNTU系统,输入对环境变量NS_LOG的设置:
yan@ysw:~/NS3/ns-allinone-3.25/ns-3.25$ export NS_LOG=UdpEchoClientApplication=level_all运行结果:
Waf: Entering directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'Waf: Leaving directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'Build commands will be stored in build/compile_commands.json'build' finished successfully (1.023s)UdpEchoClientApplication:UdpEchoClient(0x98f0d0)UdpEchoClientApplication:SetDataSize(0x98f0d0, 1024)UdpEchoClientApplication:StartApplication(0x98f0d0)UdpEchoClientApplication:ScheduleTransmit(0x98f0d0, +0.0ns)UdpEchoClientApplication:Send(0x98f0d0)At time 2s client sent 1024 bytes to 10.1.1.2 port 9At time 2.00369s server received 1024 bytes from 10.1.1.1 port 49153At time 2.00369s server sent 1024 bytes to 10.1.1.1 port 49153UdpEchoClientApplication:HandleRead(0x98f0d0, 0x98fb70)At time 2.00737s client received 1024 bytes from 10.1.1.2 port 9UdpEchoClientApplication:StopApplication(0x98f0d0)UdpEchoClientApplication:DoDispose(0x98f0d0)UdpEchoClientApplication:~UdpEchoClient(0x98f0d0)
相比前者,内容更加丰富,这些额外的调试信息是来自 NS_LOG_FUNTION 级别的日志。这些信息显示了在脚本运行期间程序中每个函数调用过程,UdpEchoClientApplication :方法名,这些方法名可以去build/ns3目录下的udp-echo-client.h查看
当想查看日志来自何处时,可由:
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
Waf: Entering directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'Waf: Leaving directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'Build commands will be stored in build/compile_commands.json'build' finished successfully (1.012s)UdpEchoClientApplication:UdpEchoClient(0x1db0180)UdpEchoClientApplication:SetDataSize(0x1db0180, 1024)UdpEchoClientApplication:StartApplication(0x1db0180)UdpEchoClientApplication:ScheduleTransmit(0x1db0180, +0.0ns)UdpEchoClientApplication:Send(0x1db0180)UdpEchoClientApplication:Send(): At time 2s client sent 1024 bytes to 10.1.1.2 port 9At time 2.00369s server received 1024 bytes from 10.1.1.1 port 49153At time 2.00369s server sent 1024 bytes to 10.1.1.1 port 49153UdpEchoClientApplication:HandleRead(0x1db0180, 0x1db0c20)UdpEchoClientApplication:HandleRead(): At time 2.00737s client received 1024 bytes from 10.1.1.2 port 9UdpEchoClientApplication:StopApplication(0x1db0180)UdpEchoClientApplication:DoDispose(0x1db0180)UdpEchoClientApplication:~UdpEchoClient(0x1db0180)
运行脚本你将看到每条日志都有产生此条日志的组件名做前缀了。
同理也可以通过
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:UdpEchoServerApplication=level_all|prefix_func'
查看回显客户端和服务器的所有日志消息。
有时能够看到日志生成的仿真时间也是很有用的。可以通过使用prefix_time 位来实现。
export'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:UdpEchoServerApplication=level_all|prefix_func|prefix_time'
现在试着设置 NS_LOG 变量为,
export 'NS_LOG=*=level_all|prefix_func|prefix_time'上面的星号是日志组件通配符。将打开在仿真过程中使用的所有组件的日志功能。这里不列出结果了。可以将这些信息重定向到一个文件,并且用自己喜欢的编辑器打开查看。
./waf --run scratch/myfirst > log.out 2>&1.日志系统函数
可以在脚本中使用宏NS_LOG_COMPONENT_DEFINE(name)定义一个日志模块。(注意,为了使用宏NS_LOG(name, level)来输出这个模块所定义的内容,这个定义语句必须写在每个脚本文件的开始。
1)在脚本里使用宏NS_LOG_COMPONENT_DEFINE(name)定义一个日志模块;
2)使用宏LogComponentEnable(name, level)启用日志(对应地,有宏LogComponentDisable(name, level)用于禁用日志);
example:
NS_LOG_COMPONENT_DEFINE("Example");LogComponentEnable("Example", LOG_LEVEL_INFO); //等价于shell中:export NS_LOG = 'Example=info'现在我们来增加一个日志消息,显示本脚本在“创建拓扑”:
打开scratch/first.cc文件并且在
NodeContainernodes;
nodes,Create(2);
之前加上一行:
NS_LOG_INFO ("CreatingTopology");
用waf编译脚本并且清楚NS_LOG环境变量,来关掉之前启用的日志文件
$ ./waf
$ exportNS_LOG=
然后运行脚本,但是看不到新的日志消息,那是因为与它相关的日志组件(FirstScriptExample)没有被启用。为了看到该日志的消息,必须使用大于或等于NS_LOG_INFO的日志级别来启用FirstScriptExample日志组件。如果只是想要看某个级别的日志,你可以通过下面的语句来启用它,
$ exportNS_LOG=FirstScriptExample=info
再运行脚本,可以看到“Creating Topology”的日志消息。
export NS_LOG=
- NS3为脚本运行创建日志LOG
- 如何在NS3下运行测试脚本
- 创建log日志文件
- nginx log日志切割脚本
- NS3入门学习(一)之脚本运行实例
- Qt5_使用QtCreator来运行NS3的脚本
- hive-redis运行Log日志
- Magento创建日志(log)
- NS3学习日志
- ns3打印日志
- NS3笔记-初识NS3编译运行
- NS3学习第一阶段---运行NS3实例
- ns3网卡创建流程
- 创建调试日志(log)文件
- NS3 让你的仿真脚本运行在你想要的位置
- (二)NS3如何编译、运行脚本和 Command Line命令行参数设置
- NS3 Logging Module 日志模块
- NS3 Logging Module 日志模块
- linux 内存使用率高问题
- Linux中查看日志的常用命令
- Ubuntu svn 缺少一些.so文件
- excel VBA对特定背景颜色的单元格进行赋值
- angularJS 如何绑定file表单的change?
- NS3为脚本运行创建日志LOG
- 多种效果转换的轮播图
- 彩色转灰度算法(FPGA实现)
- .NET基础笔记(C#)
- 教你一招最屌的阅读开源项目的姿势
- python exception
- python字符串
- iframe 父页面a标签链接跳转子页面锚点方法
- Android -- service之绑定服务