GOOGLE LOG学习(140)

今日空闲,却也看了下protocolbuffer的代码,发现一个google log模块很有意思,记录下来++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
DECLARE_STREAM_OPERATOR(char , "%c" )
DECLARE_STREAM_OPERATOR(int , "%d" )
DECLARE_STREAM_OPERATOR(uint , "%u" )
DECLARE_STREAM_OPERATOR(long , "%ld")
DECLARE_STREAM_OPERATOR(unsigned long, "%lu")
DECLARE_STREAM_OPERATOR(double , "%g" )
common.cc 173
#define GOOGLE_LOG(LEVEL) \有等级,警告,错误,严重等
::google::protobuf::internal::LogFinisher() = \
::google::protobuf::internal::LogMessage( \
::google::protobuf::LOGLEVEL_##LEVEL, __FILE__, __LINE__)
#define GOOGLE_LOG_IF(LEVEL, CONDITION) \
!(CONDITION) ? (void)0 : GOOGLE_LOG(LEVEL)
#define GOOGLE_CHECK(EXPRESSION) \
GOOGLE_LOG_IF(FATAL, !(EXPRESSION)) << "CHECK failed: " #EXPRESSION ": "
//////////////////////////////////在下的示例代码///////////////////////////
struct dd
{
public:
dd(string a){
m_ = a;
cout << a<<endl;
};~dd(){
cout<< "is end:,,,,,,,,,,"<<endl;
cout << m_<<endl<<d_<<endl;
};
dd& operator<< (string d){
d_ = d;
cout <<m_<<endl<< d<<endl;
return *this;
}
protected:
string m_;
string d_;
private:
};
#define LEVEL_ERROR "error"
#define ERROR
#define HP(a) dd(LEVEL_##b)
#define AH(a, b) a ? (void)0:dd(LEVEL_##b) //只是这里若再取一遍宏,便出错了;确实宏嵌套太多了。
#define A(c) AH(c>0, ERROR) << "hehe"

如此log,在函数中使用,当然google封装了更多的东西,比如checklog呀。在构造上记录基本信息,operator上记录tips,析构里进行log文件写入。很好

#define DO(STATEMENT) if (STATEMENT) {} else return false   这个宏。。。差点忘了,这个宏也是非常优秀的
// //