亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)英語 > 專業(yè)英語 > 計算機英語 > c語言中l(wèi)og的用法

      c語言中l(wèi)og的用法

      時間: 長思709 分享

      c語言中l(wèi)og的用法

        c語言中l(wèi)og的用法的用法下面小編就跟你們詳細介紹下c語言中l(wèi)og的用法的用法,希望對你們有用。

        c語言中l(wèi)og的用法的用法如下:

        Log4c中有三個重要的概念, Category, Appender, Layout。

        Category用于區(qū)分不同的Logger, 其實它就是個logger。在一個程序中我們可以通過Category來指定很多的Logger,用于不同的目的。

        Appdender用于描述輸出流,通過為Category來指定一個Appdender,可以決定將log信息來輸出到什么地方去,比如stdout, stderr, 文件, 或者是socket等等

        Layout用于指定日志信息的格式,通過為Appender來指定一個Layout,可以決定log信息以何種格式來輸出,比如是否有帶有時間戳, 是否包含文件位置信息等,以及他們在一條log信息中的輸出格式的等。

        轉(zhuǎn)載請注明出處:http://blog.csdn.net/fdl19881/article/details/8192363

        例子:

        系統(tǒng):ubuntu12.10 .

        準備:

        安裝log4c庫, sudo apt-get install liblog4c-dev liblog4c-doc

        別的系統(tǒng)請百度/GOOGLE找相關(guān)編譯安裝當。log4c官網(wǎng):http://log4c.sourceforge.net/index.html

        文件:

        log.h log.c 自己將log4c重新封裝的函數(shù)

        test-log.c 測試用的主函數(shù)

        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

        08.extern "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.

        24.extern int log_open(const char *category);

        25.extern void log_message(int priority ,const char* fmt, ...);

        26.extern void log_trace(const char *file , int line , const char *func, const char *fmt ,...);

        27.extern 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.

        06.static log4c_category_t *log_category = NULL;

        07.

        08.int 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.

        18.void 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.

        29.void 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.

        47.int 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.

        04.int 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上查看代碼片派生到我的代碼片

        01.gcc 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!

        講解:

        關(guān)于log.h ,log.c封裝的內(nèi)容大家可以看看,用到了可變參數(shù)宏,可變參數(shù)這些。百度一下,就有很多人講解了。這里就不說了。

        log.h與log.c里面用法也很簡單

        log_open("category_name"); //category_name一定得是log4crc里面已經(jīng)定義的category.

        關(guān)于配置文件log4crc

        更復(fù)雜的配置參見:http://xueqi.iteye.com/blog/1570013

        配置文件的搜索是由LOG4C_RCPATH環(huán)境變量決定。搜索的配置文件名為log4crc(不知道能否改變,沒研究過)

        配置文件中category的priority不知道是什么意思,,反正好像沒什么用。不管設(shè)置成什么,好像都不影響。

        環(huán)境變量:

        ?LOG4C_RCPATH holds the path to the main log4crc configuration file #環(huán)境變量若未設(shè)置,則在工作目錄(一般為運行目錄)搜索log4crc配置文件. 如果設(shè)置了此變量,則所以用log4c庫的程序都會使用此路徑下的log4c配置文件(可根據(jù)category區(qū)分).

        ?LOG4C_PRIORITY holds the "root" category priority #改變root的priority,,

        ?LOG4C_APPENDER holds the "root" category appender #改變root的appender,,因為root默認沒設(shè)置appender.

      533233