LTE Manual ——Logging(翻译)
LTE Manual ——Logging(翻译)
(本文为个人学习笔记,如有不当的地方,欢迎指正!)
9 Logging
9.1 概述
if (address == iaddr.GetBroadcast ())
{
NS_LOG_LOGIC ("For me (interface broadcast address)");
return true;
}
9.1.1 启用输出
$ NS_LOG="*" ./waf --run first
$ NS_LOG="Ipv4L3Protocol" ./waf --run first
int main (int argc, char *argv[]){
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
...
9.1.2 NS_LOG 语法
$ NS_LOG="<log-component>:<log-component>..."
$ NS_LOG="<log-component>=<option>|<option>...:<log-component>..."
9.1.3 日志组件
WifiHelper wifiHelper;wifiHelper.EnableLogComponents ();
$ NS_LOG="print-list" ./waf --run ... $ NS_LOG="foo" # a token not matching any log-component
9.1.4 Severity 和 Level 选项
| Severity Class | Meaning |
| LOG_NONE | The default, no logging |
| LOG_ERROR | Serious error messages only |
| LOG_WARN | Warning messages |
| LOG_DEBUG | For use in debugging |
| LOG_INFO | Informational |
| LOG_FUNCTION | Function tracing |
| LOG_LOGIC | Control flow tracing within functions |
| Level | Meaning |
| LOG_LEVEL_ERROR | Only LOG_ERROR severity class messages. |
| LOG_LEVEL_WARN | LOG_WARN and above. |
| LOG_LEVEL_DEBUG | LOG_DEBUG and above. |
| LOG_LEVEL_INFO | LOG_INFO and above. |
| LOG_LEVEL_FUNCTION | LOG_FUNCTION and above. |
| LOG_LEVEL_LOGIC | LOG_LOGIC and above. |
| LOG_LEVEL_ALL | All severity classes. |
| LOG_ALL | Synonym for LOG_LEVEL_ALL |
| Class | Level |
| error | level_error |
| warn | level_warn |
| debug | level_debug |
| info | level_info |
| function | level_function |
| logic | level_logic |
| level_allall* |
$ NS_LOG="<log-component>:..."
9.1.5 前缀选项
| Prefix Symbol | Meaning |
| LOG_PREFIX_FUNC | Prefix the name of the calling function. |
| LOG_PREFIX_TIME | Prefix the simulation time. |
| LOG_PREFIX_NODE | Prefix the node id. |
| LOG_PREFIX_LEVEL | Prefix the severity level. |
| LOG_PREFIX_ALL | Enable all prefixes. |
| Token | Alternate |
| prefix_func | func |
| prefix_time | time |
| prefix_node | node |
| prefix_level | level |
| prefix_all | all* |
$ NS_LOG="<log-component>:..."
$ NS_LOG="*=all|prefix_level" ./waf --run scratch-simulator
Scratch Simulator
[ERROR] error message
[WARN] warn message
[DEBUG] debug message
[INFO] info message
[FUNCT] function message
[LOGIC] logic message
$ NS_LOG="***" ... $ NS_LOG="*=all|*" ... $ NS_LOG="*=*|all" ...
$ NS_LOG="*=**" ... $ NS_LOG="*=level_all|*" ... $ NS_LOG="*=*|prefix_all" ...
$ NS_LOG="*=*|*" ...
9.2 如何在代码中添加日志功能
(1)调用 namespace ns3 里的 NS_LOG_COMPONENT_DEFINE (...); 宏。
namespace ns3 {
NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");...
(2)在函数和函数体中添加日志声明(宏调用)。
9.2.1 Logging Macros(日志宏)
| Severity Class | Macro |
| LOG_NONE | (none needed) |
| LOG_ERROR | NS_LOG_ERROR (...); |
| LOG_WARN | NS_LOG_WARN (...); |
| LOG_DEBUG | NS_LOG_DEBUG (...); |
| LOG_INFO | NS_LOG_INFO (...); |
| LOG_FUNCTION | NS_LOG_FUNCTION (...); |
| LOG_LOGIC | NS_LOG_LOGIC (...); |
void MyClass::Check (int value, char * item){
NS_LOG_FUNCTION (this << arg << item);
if (arg > )
{
NS_LOG_ERROR ("encountered bad value " << value <<
" while checking " << name << "!");
}
...}
9.2.2 Unconditional Logging(无条件的日志)
9.2.3 Guidelines(指南)
- 使用 NS_LOG_FUNCTION (this << args...); 开始每个类的方法。 这会启用简单的函数调用 tracing 。
- 除了: 不要记录运算符或明确的副本构造函数,因为这些会造成无穷递归和堆栈溢出。
- 对于没有参数的方法,使用相同形式:NS_LOG_FUNCTION (this);
- 对于静态函数:
- 有参数的话,像往常一样使用 NS_LOG_FUNCTION (...); 。
- 没有参数的话使用 NS_LOG_FUNCTION_NOARGS ();
- NS_LOG_ERROR 用于错误严重的条件(可能使仿真执行无效)。
- NS_LOG_WARN 用于不寻常的条件(可以纠正的)。 请给出问题本质以及如何纠正它的的有关提示。
- NS_LOG_DEBUG 通常以一种特别的方式使用,目的是理解模型的执行。
- NS_LOG_INFO 用于执行的附加信息,例如数据结构的大小(当添加/移除数据结构时)。
- NS_LOG_LOGIC 用于 trace 一个函数的重要逻辑分支
- 测试你的日志变化不会打破代码(break the code)。运行一些启用所有日志组件的示例程序(例如 NS_LOG="***")。
- 使用显式类型转换,用于任何类型的变量 uint8_t 或 int8_t,例如, NS_LOG_LOGIC ("Variable i is " << static_cast<int> (i));。没有了 cast, 整数会被理解为一个字符,结果最可能不符合期望。这是一个有据可查的 C++ ‘feature’。
LTE Manual ——Logging(翻译)的更多相关文章
- 【socket编程】select manual page翻译
原文: select manual page 依赖的头文件 /* According to POSIX.1-2001, POSIX.1-2008 */ #include <sys/select. ...
- trove manual installation 翻译
目标 此文件提供了一步一步的指导手动安装trove在一个现有OpenStack的环境为了开发. 该文件将不包括: OpenStack的设置 trove服务配置 要求 正在运行的OpenStack的环境 ...
- 开始进行lammps手册的学习啦,跟着Manual一边翻译一边做吧!(转载)
转载自:http://blog.sina.com.cn/s/blog_64813e370100ngsz.html 注明:黄色部分基本上为不懂的部分,红色字体为所做注释 一.各种文件的介绍: 1 in ...
- Manual——Test (翻译1)
LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 1.17.3 Testing framework(测试框架) ns-3 包含一个仿真核心引擎. ...
- day18 logging模块 sys shelve
昨日回顾 re 正则表达式 匹配字符串 场景 例如:爬虫,密码规则验证,邮箱地址验证,手机号码 学习re主要学习的就是 那一堆特殊符号 hashlib hash是一种算法 lib表示库 该模块包含了一 ...
- 如何使用Python的logging模块
几个学习连接: Python官方链接: https://docs.python.org/3.4/library/logging.html?highlight=logging 翻译(不过是2.3版本的) ...
- MySQL - Show Processlist 整理
MySQL - Show Processlist 整理 原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文 ...
- MySQL - Show Processlist 整理(转)
原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文链接http://www.cnblogs.com/len ...
- Show Global Status 整理
原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文链接http://www.cnblogs.com/lenag ...
随机推荐
- C++程序员如何入门Unreal Engine 4
摘要: 一位程序员网友小保哥分享自己的UE4快速上手过程,只是笔记,52VR做了一点更加适合阅读的修改,整理给大家. 首先,本文只是针对有比较熟练C++技能的程序员,他可以没有任何图形学或游戏引擎方面 ...
- IOS在线安装App
在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...
- Apache与Tomcat的整合
一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由 ...
- BufferedReader与Scanner的区别
在Java中,我们都知道Java的标准输入串是System.in.但是我们却很少在Java中看到谁使用它,这是因为我们平时输入的都是一个字符串或者是一个数字等等.而System.in提供的read方法 ...
- 【皇甫】☀ 图_substring
substring是啥?
- zzuli-小火山的跳子游戏
Description 小火山和火山火山在一块玩跳子游戏.规则如下: 1:跳子的起始位置为0,棋盘大小从1到N 2:每次跳子跳k步. 例如当前位置为i, 那么下一步为i + k 3:跳 ...
- Hdu 1009 FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Office2010安装错误1402问题(我安装成功了)
转载:http://blog.sina.com.cn/s/blog_555ea2470101831d.html 做个记录. 1.卸载OFFICE 使用工具 MicrosoftFixit,Window ...
- uexGaodeMap插件Android接入指引
uexGaodeMap插件Android接入指引 高德地图插件是基于高德地图API封装的AppCan平台的插件模块.开发者集成及使用此插件,需要到高德开放平台为应用申请相应的APIKey,并将APIK ...
- asp .Net TreeView实现数据绑定和事件响应
最近做了一个图书馆管理系统,其中要实现中图法分类号查询,因为初学asp ,感觉还有点难度, 第一步:数据库文件 第二步 向界面中拖进TreeView控件 第三步添加事件 下面是cs文件代码 //Tre ...