log4cplus主要包括layout、appender、loglevel等;實(shí)現(xiàn)了5個(gè)等級(jí)的信息:DEBUG、INFO、WARNING、ERROR和FATAL。
Layouts :布局器,控制輸出消息的格式.
Categories :分類器,層次化(hierarchy)的結(jié)構(gòu),用于對(duì)被記錄信息的分類,層次中每一個(gè)節(jié)點(diǎn)維護(hù)一個(gè)logger的所有信息。
1

//Include .h file
2

#include <log4cplus/logger.h>
3

#include <log4cplus/fileappender.h>
4

#include <log4cplus/consoleappender.h>
5

#include <log4cplus/layout.h>
6

#include <string>
7

#include <memory>
8

using namespace log4cplus;
9

using namespace log4cplus::helpers;
10

int main()
11



{
12

//FileAppender(const log4cplus::tstring& filename, L
13

// OG4CPLUS_OPEN_MODE_TYPE mode = LOG4CPLUS_FSTREAM_NAMESPACE::ios::trunc,
14

// bool immediateFlush = true);
15

//filename : 文件名
16

//mode : 文件類型,可選擇的文件類型包括app、ate、binary、in、out、trunc標(biāo)志,缺省是trunc,表示將先前文件刪除。
17

//immediateFlush :緩沖刷新標(biāo)志,如果為true表示每向文件寫(xiě)一條記錄就刷新一次緩存,否則直到FileAppender
18

// 被關(guān)閉或文件緩存已滿才更新文件,一般是要設(shè)置true的,比如你往文件寫(xiě)的過(guò)程中出了錯(cuò)誤(如程序非正常退出),
19

// 即使文件沒(méi)有正常關(guān)閉也可以保證程序終止時(shí)刻之前的所有記錄都會(huì)被正常保存。
20

// 定義一個(gè)文件Appender
21

SharedAppenderPtr pFileAppender(new FileAppender(("testlog.log")));
22
23

//log4cplus::RollingFileAppender::RollingFileAppender(const log4cplus::tstring& filename,
24

// long maxFileSize,
25

// int maxBackupIndex,
26

// bool immediateFlush)
27

//filename : 文件名
28

//maxFileSize : 文件的最大尺寸
29

//maxBackupIndex : 最大記錄文件數(shù)
30

//immediateFlush : 緩沖刷新標(biāo)志
31

//RollingFileAppender類可以根據(jù)你預(yù)先設(shè)定的大小來(lái)決定是否轉(zhuǎn)儲(chǔ),當(dāng)超過(guò)該大小,后續(xù)log信息會(huì)另存到新文件中,
32

//除了定義每個(gè)記錄文件的大小之外,你還要確定在RollingFileAppender類對(duì)象構(gòu)造時(shí)最多需要多少個(gè)這樣的記錄文件(maxBackupIndex+1),
33

//當(dāng)存儲(chǔ)的文件數(shù)目超過(guò)maxBackupIndex+1時(shí),會(huì)刪除最早生成的文件,保證整個(gè)文件數(shù)目等于maxBackupIndex+1。然后繼續(xù)記錄
34

//SharedAppenderPtr pFileAppender(new RollingFileAppender("testlog.log", 5*1024, 5));
35
36
37

//DailyRollingFileAppender::DailyRollingFileAppender(const log4cplus::tstring& filename,
38

// DailyRollingFileSchedule schedule,
39

// bool immediateFlush,
40

// int maxBackupIndex)
41

//DailyRollingFileAppender類可以根據(jù)你預(yù)先設(shè)定的頻度來(lái)決定是否轉(zhuǎn)儲(chǔ),當(dāng)超過(guò)該頻度,后續(xù)log信息會(huì)另存到新文件中
42

//,這里的頻度包括:MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每?jī)商欤OURLY(每時(shí))、MINUTELY(每分)。
43

//maxBackupIndex的含義同上,
44

//下面代碼運(yùn)行后會(huì)以分鐘為單位,分別生成名為Test.log.2004-10-17-03-03、
45

//Test.log.2004-10-17-03-04和Test.log.2004-10-17-03-05這樣的文件;如果超過(guò)了就另存。
46

//SharedAppenderPtr pFileAppender(new DailyRollingFileAppender("test.log", MINUTELY, true, 5));
47
48
49

pFileAppender->setName("LoggerName");
50
51
52
53

//"%%",轉(zhuǎn)義為%, 即,std::string pattern = "%%" 時(shí)輸出: "%"
54

//"%c",輸出logger名稱,比如std::string pattern ="%c" 時(shí)輸出: "test_logger.subtest",
55

// 也可以控制logger名稱的顯示層次,比如"%c{1}"時(shí)輸出"test_logger",其中數(shù)字表示層次
56

//
57

//"%D",顯示本地時(shí)間,當(dāng)std::string pattern ="%D" 時(shí)輸出:"2004-10-16 18:55:45",
58

// %d顯示標(biāo)準(zhǔn)時(shí)間,所以當(dāng)std::string pattern ="%d" 時(shí)輸出 "2004-10-16 10:55:45" (因?yàn)槲覀兪菛|8區(qū),差8個(gè)小時(shí)啊)。
59

// 可以通過(guò)%d{

}定義更詳細(xì)的顯示格式,比如%d{%H:%M:%s}表示要顯示小時(shí):分鐘:秒。大括號(hào)中可顯示的
60

// 預(yù)定義標(biāo)識(shí)符如下:
61

//%a -- 表示禮拜幾,英文縮寫(xiě)形式,比如"Fri"
62

//%A -- 表示禮拜幾,比如"Friday"
63

//%b -- 表示幾月份,英文縮寫(xiě)形式,比如"Oct"
64

//%B -- 表示幾月份,"October"
65

//%c -- 標(biāo)準(zhǔn)的日期+時(shí)間格式,如 "Sat Oct 16 18:56:19 2004"
66

//%d -- 表示今天是這個(gè)月的幾號(hào)(1-31)"16"
67

//%H -- 表示當(dāng)前時(shí)刻是幾時(shí)(0-23),如 "18"
68

//%I -- 表示當(dāng)前時(shí)刻是幾時(shí)(1-12),如 "6"
69

//%j -- 表示今天是哪一天(1-366),如 "290"
70

//%m -- 表示本月是哪一月(1-12),如 "10"
71

//%M -- 表示當(dāng)前時(shí)刻是哪一分鐘(0-59),如 "59"
72

//%p -- 表示現(xiàn)在是上午還是下午, AM or PM
73

//%q -- 表示當(dāng)前時(shí)刻中毫秒部分(0-999),如 "237"
74

//%Q -- 表示當(dāng)前時(shí)刻中帶小數(shù)的毫秒部分(0-999.999),如 "430.732"%S -- 表示當(dāng)前時(shí)刻的多少秒(0-59),如 "32"
75

//%U -- 表示本周是今年的第幾個(gè)禮拜,以周日為第一天開(kāi)始計(jì)算(0-53),如 "41"
76

//%w -- 表示禮拜幾,(0-6, 禮拜天為0),如 "6"
77

//%W -- 表示本周是今年的第幾個(gè)禮拜,以周一為第一天開(kāi)始計(jì)算(0-53
78

//
79

//"%F",輸出當(dāng)前記錄器所在的文件名稱
80

//"%L",輸出當(dāng)前記錄器所在的文件行號(hào)"
81

//"%l",輸出當(dāng)前記錄器所在的文件名稱和行號(hào)
82

//"%m",輸出原始信息,以確保原始信息被嵌入到帶格式的信息中。
83

//"%n",換行符,沒(méi)什么好解釋的
84

//"%p",輸出LogLevel,比如std::string pattern ="%p" 時(shí)輸出:"DEBUG"ï
85

//"%x",嵌套診斷上下文NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息,
86

// NDC可以用對(duì)不同源的log信息(同時(shí)地)交叉輸出進(jìn)行區(qū)分,關(guān)于NDC方面的詳細(xì)介紹會(huì)在下文中提到。
87

//格式對(duì)齊,比如std::string pattern ="%-10m"時(shí)表示左對(duì)齊,寬度是10,此時(shí)會(huì)輸出"teststr ",
88

//當(dāng)然其它的控制字符也可以相同的方式來(lái)使用,比如"%-12d","%-5p"等等
89

std::auto_ptr<Layout> pPatternLayout(new PatternLayout(("%p:%D -%m [%l]%n")));
90

pFileAppender->setLayout(pPatternLayout);
91
92

// 定義Logger
93

Logger pTestLogger = Logger::getInstance(("LoggerName"));
94

95

// 將需要關(guān)聯(lián)Logger的Appender添加到Logger上
96

pTestLogger.addAppender(pFileAppender);
97
98

// 輸出日志信息
99

//LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message

");
100

//LOG4CPLUS_DEBUG(pTestLogger, "This is a <Warn> log message

");
101

pTestLogger.setLogLevel(TRACE_LOG_LEVEL);
102

103

LOG4CPLUS_TRACE(pTestLogger, "printMessages()");
104

LOG4CPLUS_DEBUG(pTestLogger, "This is a DEBUG message");
105

LOG4CPLUS_INFO(pTestLogger, "This is a INFO message");
106

LOG4CPLUS_WARN(pTestLogger, "This is a WARN message");
107

LOG4CPLUS_ERROR(pTestLogger, "This is a ERROR message");
108

LOG4CPLUS_FATAL(pTestLogger, "This is a FATAL message");
109

110

return 1;
111

}
112
