1 日志模块的使用
1.1 日志概述
- LOG_ERROR — Log error messages (相关的宏:NS_LOG_ERROR);
- LOG_WARN — Log warning messages (相关的宏: NS_LOG_WARN);
- LOG_DEBUG — Log relatively rare, ad-hoc debugging messages (相关的宏: NS_LOG_DEBUG);
- LOG_INFO — Log informational messages about program progress(相关的宏: NS_LOG_INFO);
- LOG_FUNCTION — Log a message describing each function called(两个相关的宏 : NS_LOG_FUNCTION 用于成员函数, NS_LOG_FUNCTION_NOARGS 用于静态函数);
- LOG_LOGIC – Log messages describing logical flow within a function (相关的宏: NS_LOG_LOGIC);
- LOG_ALL — Log everything mentioned above(无相关的宏)。
- NS_LOG_UNCOND – Log the associated message unconditionally(没有相关日志级别)
./war --run scratch/myfirst
Waf: Entering directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
'build' finished successfully (.413s)
Sent bytes to 10.1.1.2
Received bytes from 10.1.1.1
Received bytes from 10.1.1.2
上面看到的 "Sent" 和 "Received" 消息实际上是来自 UdpEchoClientApplication 和 UdpEchoServerApplication 的日志消息。我们通过 NS_LOG 环境变量设置日志级别让客户端程序输出更多信息。
假设你在使用一个类 sh 的 shell。此类 shell 使用 “VARIABLE=value” 的语法格式设置环境变量。如果使用类 csh 的 shell,必须将例句改成 "setenv VARIABLE value" 语法格式的语句。
现在,scratch/myfirst.cc 中 UDP 回显客户端应用在使用下面的代码行进行响应,
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
export NS_LOG=UdpEchoClientApplication=level_all
UdpEchoClientApplication=level_all
Waf: Entering directory `/home/craigdo/repos/ns--allinone/ns--dev/build
Waf: Leaving directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
'build' finished successfully (.404s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
Sent bytes to 10.1.1.2
Received bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
Received bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
这些额外的调试信息是来自 NS_LOG_FUNTION 级别的日志。这些信息显示了在脚本运行期间程序中每个函数调用过程。注意,ns-3 中模型对日志的支持并不是必须的。有关被记录信息的多少是由模型的开发者决定的。在本例中,有很多日志输出。
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
'build' finished successfully (.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent bytes to 10.1.1.2
Received bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): Received bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
UdpEchoServerApplication=level_all|prefix_func'
Waf: Entering directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
'build' finished successfully (.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize()
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent bytes to 10.1.1.2
UdpEchoServerApplication:HandleRead(): Received bytes from 10.1.1.1
UdpEchoServerApplication:HandleRead(): Echoing packet
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): Received bytes from 10.1.1.2
UdpEchoServerApplication:StopApplication()
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:
UdpEchoServerApplication=level_all|prefix_func|prefix_time'
Waf: Entering directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
'build' finished successfully (.418s)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize()
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
2s UdpEchoClientApplication:Send(): Sent bytes to 10.1.1.2
.00369s UdpEchoServerApplication:HandleRead(): Received bytes from 10.1.1.1
.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
.00737s UdpEchoClientApplication:HandleRead(): Received bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
export 'NS_LOG=*=level_all|prefix_func|prefix_time'
./waf --run scratch/myfirst > log.out >&
1.3 为你的代码增加日志功能
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
NodeContainer nodes; nodes.Create();
NS_LOG_INFO ("Creating Topology");
现在用 waf 编译脚本并且清除 NS_LOG 环境变量来关掉我们之前启用的日志文件:
$ ./waf
$ export NS_LOG=
./waf --run scratch/myfirst
export NS_LOG=FirstScriptExample=info
Waf: Entering directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns--allinone/ns--dev/build'
'build' finished successfully (.404s)
Creating Topology
Sent bytes to 10.1.1.2
Received bytes from 10.1.1.1
Received bytes from 10.1.1.2
ns3 Tutorial 中的日志模块(翻译)的更多相关文章
-
Python 中 logging 日志模块在多进程环境下的使用
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 中 logging 日志模块在多进程环境下的使用 使用 Pytho ...
-
python中的日志模块logging
1.日志级别5个: 警告Warning 一般信息Info 调试 Debug 错误Error 致命Critical 2.禁用日志方法 logging.disable(logging.DEBUG) 3 ...
-
在python_request 中 nb-log 日志模块的使用,应用到项目实际使用
一.安装 pip install nb-log pycham 中安装: 二.基本使用 2.1 pycham中调整设置控制台日志打印出的颜色 2.2 设置完成后去掉console弹出的颜色设置 2.3 ...
-
Python中logging日志模块的使用
参考https://www.cnblogs.com/CJOKER/p/8295272.html
-
Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
-
Python入门之Python中的logging模块
基本用法 下面的代码展示了logging最基本的用法. import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = log ...
-
python的logging日志模块(一)
最近修改了项目里的logging相关功能,用到了Python标准库里的logging模块,在此做一些记录.主要是从官方文档和*上查询到的一些内容. 官方文档 技术博客 基本用法 ...
-
mybaits源码分析--日志模块(四)
一.日志模块 首先日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j,Log4j2,Apache Commons Log,java.u ...
-
第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志
SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列 本文是Stairway系列的一部分:SQL ...
随机推荐
-
论java虚拟类和接口的区别
如题:Abstract使数据成员虚拟化,而Interface则使方法成员虚拟化.
-
zoj 3591 Nim 博弈论
思路:先生成序列再求异或,最多的可能为n*(n+1)/2: 在去掉其中必败的序列,也就是a[i]=a[j]之间的序列. 代码如下: #include<iostream> #include& ...
-
linux中配置maven环境
一 . 下载maven http://maven.apache.org/download.cgi 二. 将maven解压到你的工具文件夹下 如我是解压到: /home/urc/tool下 三. ...
-
将solr3.5整合到Tomcat6.x中
最近在学习Lucene,然后进入到solr中,没想到一开始,solr就给我来了这么困难的开头,希望万事开头难,以后可以顺利一点吧.记录下将solr3.5整合到Tomcat6.x中的过程,以及遇到的一个 ...
-
Python 随机生成有效手机号码及身份证
中国那么大,人那么多,几乎人手一部手机.手机号码已经作为各大互联网站的注册账户.同样,身份证更是如此.以下是生成有效手机号码和身份证号. 身份证需要下载districtcode.txt这个文件:htt ...
-
MyBatis动态代理
一.项目结构 二.代码实现 import java.util.List; import java.util.Map; import com.jmu.bean.Student; public inter ...
-
【C#加深理解系列】(一)反射
什么是反射 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创 ...
-
pandas数据清洗策略1
Pandas常用的数据清洗5大策略如下: 1.删除 DataFrame 中的不必要 columns 2.改变 DataFrame 的 index 3.使用 .str() 方法来清洗 columns 4 ...
- Java -cp 命令查看 zookeeper 日志
-
python学习第一次
一,安装python 官网下载地址:https://www.python.org/downloads/windows/ 我下载的是最新的: Download Windows x86 web-based ...