商務英語計算機英語

c語言中log的用法

本文已影響 5.61K人 

c語言中log的用法的用法下面小編就跟你們詳細介紹下c語言中log的用法的用法,希望對你們有用。

ing-bottom: 75%;">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 <string.h>

05.#include <stdlib.h>

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 <log4c.h>

02.#include <assert.h>

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 <stdio.h>

02.#include "log.h"

03.

main(void)

05.{

06. log_open("<span style="color: rgb(51, 51, 51); line-height: 20px;">mycat</span>");

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.<?xml version="1.0" encoding="ISO-8859-1"?>

02.<!DOCTYPE log4c SYSTEM "">

03.

04.<log4c version="1.2.1">

05.

06. <config>

07. <bufsize>0</bufsize>

08. <debug level="2"/>

09. <nocleanup>0</nocleanup>

10. <reread>1</reread>

11. </config>

12.

13. <!-- root category ========================================= -->

14. <category name="root" priority="notice"/>

15. <category name="mycat" priority="debug" appender="stdout"/>

16.

17. <!-- default appenders ===================================== -->

18. <appender name="stdout" type="stream" layout="basic"/>

19. <appender name="stderr" type="stream" layout="dated"/>

20. <appender name="syslog" type="syslog" layout="basic"/>

21.

22. <!-- default layouts ======================================= -->

23. <layout name="basic" type="basic"/>

24. <layout name="dated" type="dated"/>

25.

26.</log4c>

編譯命令:

[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.

猜你喜歡

熱點閱讀

最新文章