亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

C語(yǔ)言

c語(yǔ)言中l(wèi)og的用法指導(dǎo)

時(shí)間:2025-03-23 09:15:12 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

c語(yǔ)言中l(wèi)og的用法指導(dǎo)

  C語(yǔ)言是一門(mén)實(shí)踐性和動(dòng)手能力要求很高的大學(xué)主干課程,但是C語(yǔ)言實(shí)驗(yàn)課的教學(xué)一直不受重視,教學(xué)效果也不太理想。下面小編就跟你們?cè)敿?xì)介紹下c語(yǔ)言中l(wèi)og的用法的用法,希望對(duì)你們有用。

  c語(yǔ)言中l(wèi)og的用法指導(dǎo) 1

  Log4c中有三個(gè)重要的概念, Category, Appender, Layout。

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

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

  Layout用于指定日志信息的格式,通過(guò)為Appender來(lái)指定一個(gè)Layout,可以決定log信息以何種格式來(lái)輸出,比如是否有帶有時(shí)間戳, 是否包含文件位置信息等,以及他們?cè)谝粭llog信息中的輸出格式的等。

  例子:

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

  準(zhǔn)備:

  安裝log4c庫(kù), sudo apt-get install liblog4c-dev liblog4c-doc

  別的系統(tǒng)請(qǐng)百度/GOOGLE找相關(guān)編譯安裝當(dāng)。

  文件:

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

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

  log4crc 配置文件(xml,照著寫(xiě)就行)

  //log.h

  [cpp] view plain copy

  01.#ifndef _LOG_H_

  02.#define _LOG_H_

  03.

  04.#include

  05.#include

  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

  02.#include

  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

  02.#include "log.h"

  03.

  04.int 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.}

  //配置文件,默認(rèn)名為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上查看代碼片派生到我的代碼片

  01.gcc test-log.c log.c -o test-log -llog4c

  運(yùn)行效果

  ./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ù)這些。百度一下,就有很多人講解了。這里就不說(shuō)了。

  log.h與log.c里面用法也很簡(jiǎn)單

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

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

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

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

  環(huán)境變量:

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

  ?LOG4C_PRIORITY holds the "root" category priority #改變r(jià)oot的priority,,

  ?LOG4C_APPENDER holds the "root" category appender #改變r(jià)oot的appender,,因?yàn)閞oot默認(rèn)沒(méi)設(shè)置appender.

  c語(yǔ)言中l(wèi)og的用法指導(dǎo) 2

  1、C語(yǔ)言中,有兩個(gè)log函數(shù),分別為log10和log函數(shù),具體用法如下:

  2、函數(shù)名: log10

  功 能: 對(duì)數(shù)函數(shù)log,以10為底

  用 法: double log10(double x);

  程序示例:

  #include <math.h>

  #include <stdio.h>int main(void)

  {

  double result;

  double x = 800.6872;

  result = log10(x);

  printf("The common log of %lf is %lf ", x, result);

  return 0;

  }

  3、函數(shù)名: log

  功 能: 對(duì)數(shù)函數(shù)log,以e(2.71828)為底

  用 法: double log(double x);

  程序示例:

  #include <math.h>

  #include <stdio.h>int main(void)

  {

  double result;

  double x = 800.6872;

  result = log(x);

  printf("The common log of %lf is %lf ", x, result);

  return 0;

  }

【c語(yǔ)言中l(wèi)og的用法指導(dǎo)】相關(guān)文章:

c語(yǔ)言中free的用法指導(dǎo)09-17

c語(yǔ)言中bit的用法11-01

C語(yǔ)言中assert用法09-22

C語(yǔ)言中的assert用法10-10

c語(yǔ)言中default的用法05-26

c語(yǔ)言中多個(gè)if的用法11-12

c語(yǔ)言中g(shù)etch的用法06-01

c語(yǔ)言中邏輯或的用法05-23

c語(yǔ)言中%s的用法07-01