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 ...
随机推荐
- struts-OGNL
特点 常用来访问值栈里对象属性的一种语言 通常由struts标签来解析执行 <%@ taglib prefix="s" uri="/struts-tags" ...
- WebForm 常用控件
一.简单控件 1.Label(作用:显示文字) Web中: <asp:Label ID="Label1" runat="server" Text=&quo ...
- 反编译android的apk
将要反编译的APK后缀名改为.rar或 .zip,并解压 得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的 ...
- C语言pow函数编写
C语言pow函数编写 #include<stdio.h> double chaoba(double f,double q); //声明自定义函数 void main(void) { dou ...
- Windows Phone 五、配置存储
基本存储形式 本地设置:ApplicationData.Current.LocalSettings 漫游设置:ApplicationData.Current.RoamingSettings 支持的数据 ...
- ffmpeg将图片合成视频
本来想做个android录制屏幕的功能,但是目前只能是截图 然后把图片合成视频,这里就需要用到 ffmpeg 在做之前也是参考了其它一些比较不错的文章 比如:http://www.open-open. ...
- 基于webpack使用ES6新特性(转载)
本文转载自: http://www.tuicool.com/articles/vye2ea6
- Java以基础类库
Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...
- Ext中renderer用法及参数
转载处:http://blog.csdn.net/yangxiaojun9238/article/details/8240139 setHeader是设置http恳求的头是MIME 和谈的拓展可以实现 ...
- JavaScript 的倒计时
一年前,在网上找到的例子,现在已经找不到出处,对不住原作者,请原谅.修改了一下,在刷新页面的情况下,倒计时不重来. 没有任何样式,纯文字倒计时. <!DOCTYPE html> <h ...