c語言中log的用法指導
C語言是一門實踐性和動手能力要求很高的大學主幹課程,但是C語言實驗課的教學一直不受重視,教學效果也不太理想。下面小編就跟你們詳細介紹下c語言中log的用法的用法,希望對你們有用。
Log4c中有三個重要的概念, Category, Appender, Layout。
Category用於區分不同的Logger, 其實它就是個logger。在一個程序中我們可以通過Category來指定很多的Logger,用於不同的目的。
Appdender用於描述輸出流,通過為Category來指定一個Appdender,可以決定將log信息來輸出到什麼地方去,比如stdout, stderr, 文件, 或者是socket等等
Layout用於指定日誌信息的格式,通過為Appender來指定一個Layout,可以決定log信息以何種格式來輸出,比如是否有帶有時間戳, 是否包含文件位置信息等,以及他們在一條log信息中的.輸出格式的等。
轉載請註明出處:
例子:
系統:ubuntu12.10 .
準備:
安裝log4c庫, sudo apt-get install liblog4c-dev liblog4c-doc
別的系統請百度/GOOGLE找相關編譯安裝當。log4c官網:
文件:
log.h log.c 自己將log4c重新封裝的函數
test-log.c 測試用的主函數
log4crc 配置文件(xml,照着寫就行)
//log.h
[cpp] view plain copy
01.#ifndef _LOG_H_
02.#define _LOG_H_
03.
04.#include
05.#include
06.
07.#ifdef __cplusplus
rn "C"
09.{
10.#endif
11.
12.#include "log4c.h"
13.
14.#ifdef __cplusplus
15.}
16.#endif
17.
18.#define LOG_PRI_ERROR LOG4C_PRIORITY_ERROR
19.#define LOG_PRI_WARN LOG4C_PRIORITY_WARN
20.#define LOG_PRI_NOTICE LOG4C_PRIORITY_NOTICE
21.#define LOG_PRI_DEBUG LOG4C_PRIORITY_DEBUG
22.#define LOG_PRI_TRACE LOG4C_PRIORITY_TRACE
23.
rn int log_open(const char *category);
rn void log_message(int priority ,const char* fmt, ...);
rn void log_trace(const char *file , int line , const char *func, const char *fmt ,...);
rn int log_close();
28.
29.#define LOG_ERROR(fmt , args...)
30. log_message(LOG_PRI_ERROR, fmt, ##args)
31.#define LOG_WARN(fmt, args...)
32. log_message(LOG_PRI_WARN, fmt , ##args)
33.#define LOG_NOTICE(fmt , args...)
34. log_message(LOG_PRI_NOTICE, fmt , ##args)
35.#define LOG_DEBUG(fmt , args...)
36. log_message(LOG_PRI_DEBUG, fmt , ##args)
37.#define LOG_TRACE(fmt,args...)
38. log_trace(__FILE__ , __LINE__ , __FUNCTION__ , fmt ,## args)
39.
40.
41.#endif
//log.c
[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
01.#include
02.#include
03.#include "log.h"
04.
05.
ic log4c_category_t *log_category = NULL;
07.
log_open(const char *category)
09.{
10. if (log4c_init() == 1)
11. {
12. return -1;
13. }
14. log_category = log4c_category_get(category);
15. return 0 ;
16.}
17.
log_message(int priority , const char *fmt , ...)
19.{
20. va_list ap;
21.
22. assert(log_category != NULL);
23.
24. va_start(ap, fmt);
25. log4c_category_vlog(log_category , priority , fmt , ap);
26. va_end(ap);
27.}
28.
log_trace(const char *file, int line, const char *fun,
30. const char *fmt , ...)
31.{
32. char new_fmt[2048];
33. const char *head_fmt = "[file:%s, line:%d, function:%s]";
34. va_list ap;
35. int n;
36.
37. assert(log_category != NULL);
38. n = sprintf(new_fmt, head_fmt , file , line , fun);
39. strcat(new_fmt + n , fmt);
40.
41. va_start(ap , fmt);
42. log4c_category_vlog(log_category , LOG4C_PRIORITY_TRACE, new_fmt , ap);
43. va_end(ap);
44.}
45.
46.
log_close()
48.{
49. return (log4c_fini());
50.}
//test-log.c
[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
01.#include
02.#include "log.h"
03.
main(void)
05.{
06. log_open("mycat");
07. LOG_TRACE("trace");
08. LOG_ERROR("error");
09. LOG_WARN("warn");
10. LOG_NOTICE("notice");
11. LOG_DEBUG("hello log4c!");
12. log_close();
13. return 0;
14.}
//配置文件,默認名為log4crc
[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
01.
02.
03.
04.
05.
06.
07.0
08.
09.0
10.1
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
編譯命令:
[python] view plain copy 在CODE上查看代碼片派生到我的代碼片
test-log.c log.c -o test-log -llog4c
運行效果
./test-log
[stdout] TRACE mycat - [file:test-log.c, line:7, function:main]trace
[stdout] ERROR mycat - error
[stdout] WARN mycat - warn
[stdout] NOTICE mycat - notice
[stdout] DEBUG mycat - hello log4c!
講解:
關於log.h ,log.c封裝的內容大家可以看看,用到了可變參數宏,可變參數這些。百度一下,就有很多人講解了。這裏就不説了。
log.h與log.c裏面用法也很簡單
log_open("category_name"); //category_name一定得是log4crc裏面已經定義的category.
關於配置文件log4crc
更復雜的配置參見:
配置文件的搜索是由LOG4C_RCPATH環境變量決定。搜索的配置文件名為log4crc(不知道能否改變,沒研究過)
配置文件中category的priority不知道是什麼意思,,反正好像沒什麼用。不管設置成什麼,好像都不影響。
環境變量:
?LOG4C_RCPATH holds the path to the main log4crc configuration file #環境變量若未設置,則在工作目錄(一般為運行目錄)搜索log4crc配置文件. 如果設置了此變量,則所以用log4c庫的程序都會使用此路徑下的log4c配置文件(可根據category區分).
?LOG4C_PRIORITY holds the "root" category priority #改變root的priority,,
?LOG4C_APPENDER holds the "root" category appender #改變root的appender,,因為root默認沒設置appender.
-
二級C語言考試複習五要點
綜觀近幾年全國計算機等級二級基礎部分和C語言程序設計的題目,筆試中大多數考題是與大綱要求的基本內容一致的,難度不高,但內容十分廣泛,應牢固掌握。以下是小編為您帶來的二級C語言考試複習五要點,感謝您的閲讀!一、瞭解試卷,胸中有數綜觀近幾年全國計算機等級二級...
-
C語言輸出菱形的方法
題目:輸出行列都相等的菱形,如5行5列:行列123451*2***3*****4***5*分析:當行數等於總行數的一半時,*是遞增的,遞增為2。當行數大於總行數的一半時,*是遞減的,遞增為2。設有一個行列為n的菱形,我們用變量i作為行數,以0開始,ik作為n菱第i行要輸出的*個數。則i<=n的中值(用m...
-
C語言的移位操作符使用方法
位移位運算符是將數據看成二進制數,對其進行向左或向右移動若干位的運算。位移位運算符分為左移和右移兩種,均為雙目運算符。第一運算對象是移位對象,第二個運算對象是所移的二進制位數。以下是小編為大家搜索整理的C語言的移位操作符使用方法,希望能給大家帶來幫...
-
win8系統安裝c語言方法
在win8/win8.1中C語言VC無法運行,那麼win8系統安裝c語言方法又變成了什麼呢?而現在的'計算機都是預裝win8/8.1系統,對於比較原始的TurboC是無法運行的,現在應屆畢業生小編向大家告訴大家win8系統運行TurboC軟件的方法。win8系統安裝c語言方法:win8系統運行TurboC...
相關文章
- GoogleChromeOS操作系統試用
- Spring Boot使用slf4j+logback記錄日誌配置詳解
- C語言double和float 實例分析用法
- Chongqing,a Colorful City英語作文
- C語言中volatile的使用方法
- C語言中判斷int、long型等變量是否賦值的方法
- 高一英語寫作範文:Is It the Only Way Out To Go To College
- 會考英語閲讀理解訓練及答案:A garbage collector
- 英語單詞clothes與clothing的用法與比較
- 英語作文:大學生村官 College Graduates Work as Village Offic