mxnet 源码阅读 3

mxnet/dmcl-core/include/logging.h

mxnet/dmcl-core/include/base.h

 

在mxnet/src/storage/gpu_device_storage.h 中包含了dmlc(Distributed Machine Learning Common Codebase) 的关于日志处理的函数LOG,其实质是dmlc的logging.h 头文件,

logging属于dmlc 名字空间,其中包含一些连接宏和几个类,分别对类 DateLogger LogMessage CustomLogMessage LogMessageFatal 进行介绍,

DateLogger  直接由无参数函数 HumanDate() 获取以冒号分割的当前系统时间,具体格式为 HH:MM:SS 

LogMessage 构造函数有两个参数 一个为文件名,一个为行号,一般由编译器宏 __FILE__ __LINE__ 给出,其构造函数输出包装后的 DateLogger 格式为  [HH:MM:SS]  FILE: LINE :

                      析构函数输出 "\n".作为换行结束,

                      同时拷贝构造函数和操作符= 用private修饰,用以禁止对该类的对象的拷贝和复制。

CustomLogMessage 是一个留出用户接口的类,只实现了LogMessage的构造函数类似的功能,至于析构函数和静态的Log函数没有具体实现,留给用户再具体使用是实现Log自定义输出。也就是说该类

                                  在mxnet系统中没有直接,而是留给二次开发的开发者使用的。

 LogMessageFatal 与上面的LogMessage类似,构造函数完全一致。析构函数多了处理异常和出错时的栈空间调用信息的输出,同时析构函数最后有abort()系统函数调用,用以终止进程:要么catch异常,要么abort()进程。Fatal函数的不可修复

                               注定了他的命运只能abort(); 该类和LogMessage对于拷贝构造和=运算符重载的处理也是一致的:私有化,防止了对该类的随意复用。

 

其余部分为模拟 google glog的宏

其中 LOG(INFO) LOG(WARNING) LOG(ERROR) 都是向 LogMessage的stream 中输出

LOG(FATAL) 是向 LogMessageFatal 的stream中输出信息

 

宏的拼写过程大概是

LOG(INFO)    => LOG_INFO().stream()   => dmlc::LogMessage(__FILE__, __LINE__).stream()

LOG(FATAL)  => LOG_FATAL().stream() => dmlc::LogMessageFatal(__FILE__, __LINE__).stream()

 

posted on 2017-08-08 15:05  reedlau  阅读(913)  评论(0编辑  收藏  举报

导航