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 ...
随机推荐
- Excel Note
公式的引用分为相对引用.绝对引用和混合引用.如果要使公式中的引用随着公式的下拉改变就用相对引用.如=sum(A2:D20),这个公式下拉时引用的单元格就会随着变化.如果要使公式中的引用下拉时不会改变就 ...
- Hosts文件
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开, 其作用:就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时, ...
- 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...
- DevExpress 为TextEdit设置水印文字
设置水印代码: //设置水印值public static void SetWatermark(this TextEdit textEdit, string watermark) { textEdit. ...
- springmvc中的controller是单例的
今天发现spring3中的controller默认是单例的,若是某个controller中有一个私有的变量a,所有请求到同一个controller时,使用的a变量是共用的,即若是某个请求中修改了这个变 ...
- codeforce 121E - Lucky Array
10^4以内只由4和7构成的数字只有31种,那么做法就很简单了,求出每个数字与其最接近的幸运数的差值,然后建立线段树,线段树维护区间最小值和最小值个数,如果操作过程中最小值<0,那么就去对差值进 ...
- 夺命雷公狗----Git---5---分支
git分支的概念相当于是添加一个属于自己的分支,别人是看不到的,等你写完自己的程序到时候在合并到团队的分支上即可.... 我们可以查看自己git里面有什么分支,如下所示: git branch 在这里 ...
- 此操作失败的原因是对 IID 为“{000208DA-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface
有些电脑报错,有些电脑正常. 环境:VS2010 WinForm程序, Office2007 C#操作Excel时报错.错误: 无法将类型为“System.__ComObject”的 COM 对象强制 ...
- ubuntu16.04.1下的mysql修改默认编码
在Ubuntu 下配置 Mysql 的字符编码.安装完 Mysql 后,系统默认的字符编码是 latin1 ,输入的是中文,可是输出却是一堆乱码.现在要做的就是把 Mysql的默认字符编码设置为支持中 ...
- Fortran 基础语法(一)
GE是大于等于号(>=),GT是大于号(>),LE是小于等于号(<=),LT是小于号(<) IF基本用法 If(逻辑判断式) then …… End if If(逻辑判断式 ...