1
int main(int argc, char** argv)
{
2
log4cpp::Appender* appender;
3
#ifdef LOG4CPP_HAVE_SYSLOG
4
log4cpp::SyslogAppender* syslogAppender;
5
6
syslogAppender = new log4cpp::SyslogAppender("syslog", "log4cpp");
7
#else
8
log4cpp::Appender* syslogAppender;
9
10
syslogAppender = new log4cpp::OstreamAppender("syslogdummy", &std::cout);
11
#endif
12
13
if (argc < 2)
{
14
appender = new log4cpp::OstreamAppender("default", &std::cout);
15
} else
{
16
appender = new log4cpp::FileAppender("default", argv[1]);
17
}
18
19
syslogAppender->setLayout(new log4cpp::BasicLayout());
20
appender->setLayout(new log4cpp::BasicLayout());
21
//(Root Category name为空,默认为所有category的父类)
22
log4cpp::Category& root = log4cpp::Category::getRoot();
23
root.addAppender(syslogAppender);
24
root.setPriority(log4cpp::Priority::ERROR);
25
26
// //sub1的父类是root
27
log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1"));
28
sub1.addAppender(appender);
29
30
//sub2的父类是sub1
31
log4cpp::Category& sub2 = log4cpp::Category::getInstance(std::string("sub1.sub2"));
32
33
log4cpp::NDC::push(std::string("ndc1"));
34
35
//root设置了error级别,其他级别默认为800,未设置
36
std::cout << " root prio = " << root.getPriority() << std::endl;
37
std::cout << " sub1 prio = " << sub1.getPriority() << std::endl;
38
std::cout << " sub2 prio = " << sub2.getPriority() << std::endl;
39
40
root.error("root error"); //输出
41
root.warn("root warn"); //不输出
42
43
//因为sub1未设置级别,所以采取的是父类设置的error级别,category属性_isAdditive默认为true,所以sub1打印一遍之后,root category还会打印一次(parent category都会打印一遍)
44
sub1.error("sub1 error");
45
sub1.warn("sub1 warn"); //不输出
46
47
sub2.error("sub2 error"); //同sub1,最后调用的是sub1的callAppender函数,sub1 appender打印一次, root appender打印一次
48
sub2.warn("sub2 warn");
49
50
sub1.setPriority(log4cpp::Priority::INFO); //设置了sub1的打印级别
51
std::cout << " root prio = " << root.getPriority() << std::endl;
52
std::cout << " sub1 prio = " << sub1.getPriority() << std::endl;
53
std::cout << " sub2 prio = " << sub2.getPriority() << std::endl;
54
55
std::cout << "priority info" << std::endl;
56
57
root.error("root error");
58
root.warn("root warn");
59
60
sub1.error("sub1 error");
61
sub1.warn("sub1 warn");
62
sub2.error("sub2 error");
63
sub2.warn("sub2 warn");
64
sub2.error("sub2 :%d", 10);
65
66
std::string a("1234");
67
sub2.error(a);
68
69
sub2.warnStream() << "streamed warn";
70
71
sub2 << log4cpp::Priority::WARN << "warn2" << " warn3"
72
<< log4cpp::eol << " warn4";
73
74
//因为前面设置了一次NDC1,所以下面每一条打印的NDC信息为:ndc i=xx
75
{
76
for(int i = 0; i < 10000; i++)
{
77
char ndc2[20];
78
sprintf(ndc2, "i=%d", i);
79
log4cpp::NDC::push(ndc2);
80
sub1.info("%s%d", "i = ", i);
81
if ((i % 10) == 0)
{
82
sub1.log(log4cpp::Priority::NOTICE, "reopen log");
83
if (log4cpp::Appender::reopenAll())
{
84
sub1.info("log reopened");
85
} else
{
86
sub1.warn("could not reopen log");
87
}
88
}
89
#ifndef WIN32
90
sleep(1);
91
#endif
92
log4cpp::NDC::pop();
93
}
94
}
95
96
return 0;
97
}
98
sub1 设置为debug, sub2为error, sub1是sub2的父类,sub2 _isAdditive= true
sub2.error(111); 这句sub1仍然会打印(判断是否打印是sub2的级别比较的)
log4cpp::Category::getInstance如果配置中不存在的category,那么会新创建一个category,并且以(name为空"")的category作为parent category。
posted on 2014-06-18 12:39
pizzx 阅读(877)
评论(0) 编辑 收藏 引用 所属分类:
c++/boost