<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 學習英語 > 專業英語 > 計算機英語 > c語言中log的用法

        c語言中log的用法

        時間: 長思709 分享

        c語言中log的用法

          c語言中log的用法的用法下面小編就跟你們詳細介紹下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信息中的輸出格式的等。

          轉載請注明出處:http://blog.csdn.net/fdl19881/article/details/8192363

          例子:

          系統:ubuntu12.10 .

          準備:

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

          別的系統請百度/GOOGLE找相關編譯安裝當。log4c官網:http://log4c.sourceforge.net/index.html

          文件:

          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

          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!

          講解:

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

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

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

          關于配置文件log4crc

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

          配置文件的搜索是由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.

        533233 主站蜘蛛池模板: 日本一区二区三区激情视频| 精品尤物TV福利院在线网站| 色偷偷久久一区二区三区| 蜜桃视频成人专区在线观看| 伊人久久久av老熟妇色| 亚洲精品欧美综合二区| 日韩人妻少妇一区二区三区| 无码人妻丰满熟妇啪啪网不卡| 国产精品中文字幕久久| 亚洲精品一区二区区别| 中文字幕日本在线免费| 久久99日本免费国产精品| 欧美色欧美亚洲高清在线观看| 超碰人人超碰人人| 亚洲VA久久久噜噜噜久久无码 | 加勒比中文字幕无码一区| 本免费Av无码专区一区| 1精品啪国产在线观看免费牛牛| 欧美亚洲另类 丝袜综合网| 国产中文字幕精品视频| 亚洲日韩精品无码一区二区三区| 三年片在线观看免费观看大全下载| 亚洲人成人一区二区三区| 国产做爰xxxⅹ久久久| 日韩高清免费一码二码三码| 狠狠色噜噜狠狠狠狠av不卡| 884aa四虎影成人精品| 国产精品福利自产拍久久| 国产福利酱国产一区二区| 亚洲精品午夜国产VA久久成人| 人人妻人人澡人人爽欧美二区| 正在播放的国产A一片| 欧洲一区二区中文字幕| 67194熟妇在线观看线路| 久久精品66免费99精品| 強壮公弄得我次次高潮A片| 国产深夜福利在线免费观看| 成人精品老熟妇一区二区| 成人午夜精品无码一区二区三区| 欧洲亚洲国内老熟女超碰| 色综合久久久久综合体桃花网|