转载自:http://blog.sina.com.cn/s/blog_7ec2ab360102wx5z.html
export NS_LOG="MpTcpCrypto:MpTcpFullMesh:MpTcpMapping:MpTcpNdiffPorts:MpTcpSchedulerRoundRobin:MpTcpSocketBase:MpTcpSubflow:TcpOptionMpTcp:TcpSocketBase:TcpTxBuffer"
export NS_LOG="MpTcpHeader:MpTcpL4Protocol:MpTcpSocketBase:MpTcpTypeDefs:MpTcpPacketSink:TcpRxBuffer:TcpTxBuffer:TcpSocketBase:FirstMultipathToplogy"
NS3中的日志信息默认是输出到terminal的,可以采用以下方法将信息重定向到文件中。
./waf --run scratch/myprogram>& log.out
LOG_ERROR— Log error messages (associated macro: NS_LOG_ERROR);
LOG_WARN— Log warning messages (associated macro: NS_LOG_WARN);
LOG_DEBUG— Log relatively rare, ad-hoc debugging messages (associated macro: NS_LOG_DEBUG);
LOG_INFO— Log informational messages about program progress (associated macro: NS_LOG_INFO);
LOG_FUNCTION— Log a message describing each function called (two associated macros: NS_LOG_FUNCTION, used for member functions, and NS_LOG_FUNCTION_NOARGS, used for static functions);
LOG_LOGIC– Log messages describing logical flow within a function (associated macro: NS_LOG_LOGIC);
LOG_ALL— Log everything mentioned above (no associated macro)
在仿真过程中发生了很多你所没有看到的事情。现在可以很容易的打开系统的日志组件,察看整个过程了。现在试着设置NS_LOG变量为:
$ export 'NS_LOG=*=level_all|prefix_func|prefix_time' //*是日志组件通配符,这将打开仿真过程中使用的所有日志。
可以将这些信息重定向到一个文件,并且用自己喜欢的编辑器打开查看。
$ ./waf --run scratch/first>log.out 2>&1 //重定向到log.out文件中。 2>$1表示将一个标准错误输出重定向到标准输出。
可以通过几个宏调用日志组件给仿真增加新的日志功能。
例如在first.cc中,我们已经定义了一个组件:
NS_LOG_COMPONENT_DEFINE("FirstScriptExample");
我们已经了解了通过设置NS_LOG环境变量来给组件启用日志功能。我们可以给脚本增加一些日志功能。用来增加信息级别的日志消息的宏是NS_LOG_INFO。
现在我们来增加一个日志消息,显示本脚本在“创建拓扑”:
打开scratch/first.cc文件并且在
NodeContainer nodes;
nodes,Create(2);
之前加上一行:
NS_LOG_INFO ("Creating Topology");
用waf编译脚本并且清楚NS_LOG环境变量,来关掉之前启用的日志文件
$ ./waf
$ export NS_LOG=
然后运行脚本,但是看不到新的日志消息,那是因为与它相关的日志组件(FirstScriptExample)没有被启用。为了看到该日志的消息,必须使用大于或等于NS_LOG_INFO的日志级别来启用FirstScriptExample日志组件。如果只是想要看某个级别的日志,你可以通过下面的语句来启用它,
$ export NS_LOG=FirstScriptExample=info
再运行脚本,可以看到“Creating Topology”的日志消息。