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 ...
随机推荐
- windows10搭建django1.10.3+Apache2.4
很多教程都是在linux上搭建,windows上似乎天生不太适合,但是我还是愿意试试这个坑. 首先 交代一下自己的环境 python3.5.2 64位 django 1.10.3 apache 2.4 ...
- 点餐系统sprint3总结
转眼间,sprint3也结束了.意味着软件工程的课程结束了,我们的项目也完成了.在队友们的认真学习,专注打码,辛苦赶工后,我们的项目完成了.显然是仓促中完成的,没有完美的界面.没有无bug的项目,但是 ...
- sychronized 和 Lock的比较
sychronized是在jvm层面上实现的,可以通过一些监控工具监控sychronized的锁定,而且在代码执行出现异常时,jvm会自动释放锁,但是使用Lock就不行,lock是通过代码实现的,最终 ...
- mysql 触发器示例和注解
-- 格式 CREATE TRIGGER 触发器名称 AFTER|before insert|update|delete ON 触发表 FOR EACH ROW BEGIN insert into 处 ...
- instancesRespondToSelector与respondsToSelector的区别
instancesRespondToSelector与respondsToSelector的区别 Test1.h @interface Test1 : NSObject - (void)objec ...
- 该字符串未被识别为有效的 DateTime
开发语言C#,System.Data.SQLite.dll驱动. SQLserver数据库转换为SQLite数据库时,日期类型默认转为DATETIME. 执行查询SQL语句,数据为空(查询不到数据时) ...
- percona server 二进制安装下编译tpcc-mysql的坑
出于习惯,percona server的部署都是通过二进制包自动化安装,结果遇到一个硕大无比的坑,编译TPCC-MySQL时出现警告 10:49:36 root@DB-Master:~/tpcc-my ...
- 介绍Ext JS 4.2的新特性的《深入浅出Ext JS》上市
以用户为中心的时代,应用的界面外观变得越来越重要.然而,很多程序员都缺乏美术功底,要开发出界面美观的应用实属不易.Ext JS的出现,为广大程序员解决了这一难题.它有丰富多彩的界面和强大的功能,是开发 ...
- php常用string函数
http://www.w3school.com.cn/php/php_ref_string.asp1.addcslashes() 返回在指定的字符前添加反斜杠的字符串2.addslashes() 返回 ...
- ToJson
/// <summary> /// DataTable转成Json /// </summary> /// <param name="jsonName" ...