當前位置:才華齋>計算機>C語言>

c語言中log的用法指導

C語言 閱讀(1.09W)

C語言是一門實踐性和動手能力要求很高的大學主幹課程,但是C語言實驗課的教學一直不受重視,教學效果也不太理想。下面小編就跟你們詳細介紹下c語言中log的用法的用法,希望對你們有用。

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.