log4cplus主要包括layout、appender、loglevel等;實現了5個等級的信息:DEBUG、INFO、WARNING、ERROR和FATAL。
Layouts :布局器,控制輸出消息的格式.
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標志,缺省是trunc,表示將先前文件刪除。
17

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

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

// 即使文件沒有正常關閉也可以保證程序終止時刻之前的所有記錄都會被正常保存。
20

// 定義一個文件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 : 最大記錄文件數
30

//immediateFlush : 緩沖刷新標志
31

//RollingFileAppender類可以根據你預先設定的大小來決定是否轉儲,當超過該大小,后續log信息會另存到新文件中,
32

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

//當存儲的文件數目超過maxBackupIndex+1時,會刪除最早生成的文件,保證整個文件數目等于maxBackupIndex+1。然后繼續記錄
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類可以根據你預先設定的頻度來決定是否轉儲,當超過該頻度,后續log信息會另存到新文件中
42

//,這里的頻度包括:MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每兩天)、HOURLY(每時)、MINUTELY(每分)。
43

//maxBackupIndex的含義同上,
44

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

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

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

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

//"%%",轉義為%, 即,std::string pattern = "%%" 時輸出: "%"
54

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

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

//
57

//"%D",顯示本地時間,當std::string pattern ="%D" 時輸出:"2004-10-16 18:55:45",
58

// %d顯示標準時間,所以當std::string pattern ="%d" 時輸出 "2004-10-16 10:55:45" (因為我們是東8區,差8個小時啊)。
59

// 可以通過%d{

}定義更詳細的顯示格式,比如%d{%H:%M:%s}表示要顯示小時:分鐘:秒。大括號中可顯示的
60

// 預定義標識符如下:
61

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

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

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

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

//%c -- 標準的日期+時間格式,如 "Sat Oct 16 18:56:19 2004"
66

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

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

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

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

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

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

//%p -- 表示現在是上午還是下午, AM or PM
73

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

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

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

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

//%W -- 表示本周是今年的第幾個禮拜,以周一為第一天開始計算(0-53
78

//
79

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

//"%L",輸出當前記錄器所在的文件行號"
81

//"%l",輸出當前記錄器所在的文件名稱和行號
82

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

//"%n",換行符,沒什么好解釋的
84

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

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

// NDC可以用對不同源的log信息(同時地)交叉輸出進行區分,關于NDC方面的詳細介紹會在下文中提到。
87

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

//當然其它的控制字符也可以相同的方式來使用,比如"%-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

// 將需要關聯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
