當前位置:首頁 » 編程語言 » c語言log4c
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言log4c

發布時間: 2022-06-28 15:12:39

① 如何使用log4c日誌庫,測試例子程序

系統: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
#ifndef _LOG_H_
#define _LOG_H_

#include <string.h>
#include <stdlib.h>

#ifdef __cplusplus
extern "C"
{
#endif

#include "log4c.h"

#ifdef __cplusplus
}
#endif

#define LOG_PRI_ERROR LOG4C_PRIORITY_ERROR
#define LOG_PRI_WARN LOG4C_PRIORITY_WARN
#define LOG_PRI_NOTICE LOG4C_PRIORITY_NOTICE
#define LOG_PRI_DEBUG LOG4C_PRIORITY_DEBUG
#define LOG_PRI_TRACE LOG4C_PRIORITY_TRACE

extern int log_open(const char *category);
extern void log_message(int priority ,const char* fmt, ...);
extern void log_trace(const char *file , int line , const char *func, const char *fmt ,...);
extern int log_close();

#define LOG_ERROR(fmt , args...) \
log_message(LOG_PRI_ERROR, fmt, ##args)
#define LOG_WARN(fmt, args...) \
log_message(LOG_PRI_WARN, fmt , ##args)
#define LOG_NOTICE(fmt , args...) \
log_message(LOG_PRI_NOTICE, fmt , ##args)
#define LOG_DEBUG(fmt , args...) \
log_message(LOG_PRI_DEBUG, fmt , ##args)
#define LOG_TRACE(fmt,args...) \
log_trace(__FILE__ , __LINE__ , __FUNCTION__ , fmt ,## args)

#endif

//log.c

[cpp] view plain
#include <log4c.h>
#include <assert.h>
#include "log.h"

static log4c_category_t *log_category = NULL;

int log_open(const char *category)
{
if (log4c_init() == 1)
{
return -1;
}
log_category = log4c_category_get(category);
return 0 ;
}

void log_message(int priority , const char *fmt , ...)
{
va_list ap;

assert(log_category != NULL);

va_start(ap, fmt);
log4c_category_vlog(log_category , priority , fmt , ap);
va_end(ap);
}

void log_trace(const char *file, int line, const char *fun,
const char *fmt , ...)
{
char new_fmt[2048];
const char *head_fmt = "[file:%s, line:%d, function:%s]";
va_list ap;
int n;

assert(log_category != NULL);
n = sprintf(new_fmt, head_fmt , file , line , fun);
strcat(new_fmt + n , fmt);

va_start(ap , fmt);
log4c_category_vlog(log_category , LOG4C_PRIORITY_TRACE, new_fmt , ap);
va_end(ap);
}

int log_close()
{
return (log4c_fini());
}

//test-log.c

[cpp] view plain
#include <stdio.h>
#include "log.h"

int main(void)
{
log_open("<span style="color: rgb(51, 51, 51); line-height: 20px;">mycat</span>");
LOG_TRACE("trace");
LOG_ERROR("error");
LOG_WARN("warn");
LOG_NOTICE("notice");
LOG_DEBUG("hello log4c!");
log_close();
return 0;
}

//配置文件,默認名為log4crc

[html] view plain
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE log4c SYSTEM "">

<log4c version="1.2.1">

<config>
<bufsize>0</bufsize>
<debug level="2"/>
<nocleanup>0</nocleanup>
<reread>1</reread>
</config>

<!-- root category ========================================= -->
<category name="root" priority="notice"/>
<category name="mycat" priority="debug" appender="stdout"/>

<!-- default appenders ===================================== -->
<appender name="stdout" type="stream" layout="basic"/>
<appender name="stderr" type="stream" layout="dated"/>
<appender name="syslog" type="syslog" layout="basic"/>

<!-- default layouts ======================================= -->
<layout name="basic" type="basic"/>
<layout name="dated" type="dated"/>

</log4c>

編譯命令:

[python] view plain
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!

② C++ log4cplus 寫入日誌失敗,那麼這個異常怎麼撲捉

直接用try ...catch捕獲啊
try{
LOG4CPLUS_TRACE(logger, strData.c_str());
}
catch(...)
{
//do something
}

③ log4cplus里怎麼沒法朝文件里寫入中文

輸入三個整數,輸出最大數和最小數。
main(){
int a,b,c,max,min;
printf("input three numbers: ");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{max=a;min=b;}
else
{max=b;min=a;}
if(max<c)
max=c;
else
if(min>c)
min=c;
printf("max=%d\nmin=%d",max,min);
}
本程序中,首先比較輸入的a,b的大小,並把大數裝入max,小數裝入min中,然後再與c比較,若max小於c,則把c賦予max;如果c小於min,則把c賦予min。因此max內總是最大數,而min內總是最小數。最後輸出max和min的值即可。

④ log4cplus 符合最新的c++標准嗎

log4cplus是復合最新C++標準的、凡是用到最新C++11特性的地方都使用預編譯宏區分了的,在編譯時候使用cmake會自動檢查你的編譯器是否支持C++最新標准,如果支持就會使用那個宏。比如右值引用、線程、原子鎖等等很多特性在log4cplus中都有體現。

⑤ log4cplus項目使用

debug

⑥ 如何實現log4cxx日誌輸出方式

Log4cxx是開放源代碼項目Apache Logging Service的子項目之一,用於為C++程序提供日誌功能,以便開發者對目標程序進行調試
和審計。本文對log4cxx的使用及配置進行介紹,並給出一個可以快速開始的實例。最後,針對日誌服務給出一些實踐方面的建議。
1. 介紹
Log4cxx是開放源代碼項目Apache Logging Service的子項目之一,是Java社區著名的log4j的c++移植版,用於為C++程序提供日誌
功能,以便開發者對目標程序進行調試和審計。
有關log4cxx的更多信息可以從Apache Loggin Service的網站http://logging.apache.org獲得。當前的穩定版本為0.9.7,本文內
容及示例代碼都是基於此版本。此外,示例代碼的編譯環境為Windows環境中的Microsoft Visual C++ .Net 2003。
本文的示例代碼可以在此下載,其中也包含了預編譯好的log4cxx的庫文件。
2. 集成log4cxx到IDE
要使用log4cxx,首先需要將其集成到你的項目開發環境中。以下針對Windows環境中的Microsoft Visual C++ .Net 2003進行說明
,其他環境的配置信息請參考官方文檔。
要讓log4cxx為你工作,通常情況下需要如下幾個步驟:
l 獲取軟體包:得到log4xx的源代碼;
l 編譯:構建庫文件;
l 項目環境設置:加入log4cxx支持。
2.1 獲取軟體包
請從官方網站獲得合適的版本。也可以從下面這個鏈接中直接獲取(直接的鏈接地址可能不會永遠有效):
http://mirror.vmmatrix.net/apache/logging/log4cxx/log4cxx-0.9.7.tar.gz
下載完成後解壓縮到合適的目錄中,因為我們在下一步中需要使用軟體包,包括編譯和復制必要的文件。
2.2 編譯
原始發行包中不含編譯後的代碼,這個工作需要我們自己來做。打開你的IDE,並載入以下目錄中的工程:
l Msvc\static:該工程產生log4cxx的靜態鏈接庫(lib4cxx.lib和lib4cxxs.lib);
l Msvc\dll:該工程產生log4cxx的動態鏈接庫(lib4cxx.dll)。
通常情況下,工程都可以順利編譯通過。查看輸出目錄,把這些生成的庫文件找出來,以便在下一步驟中使用。
2.3 項目環境設置
請先在IDE中打開一個需要加入日誌功能的工程,或者出於實驗目的,新建一個工程,以便對其進行設置。
首先需要設置log4cxx的include文件。這些文件位於log4cxx軟體包的include\log4cxx目錄內。請查看你的VC++ IDE中「工具->選
項->項目->VC++目錄->包含文件」所列出的內容,以便確定你以何種方式加入這些include文件:
l 將include\log4cxx直接拷貝到已定義的包含文件目錄中。如果將log4cxx看作是一項系統服務的話,這樣做是胡合乎情理
的,因為你可以採用標准庫的方式使用它,例如:#include <log4cxx/logger.h>
l 增加一個包含路徑,以指向位於IDE外部的某一文件目錄。可以簡單的指向在2.1中解壓縮後形成的log4cxx軟體包目錄。
下一步需要對2.2節產生的log4cxx庫進行設置。這取決於你使用該庫的方式:靜態鏈接或者動態鏈接。
l 靜態鏈接情況下需要做如下工作:為預編譯器定義LOG4CXX_STATIC宏,設置位置為「項目->屬性->配置屬性->C/C++->預
處理器->預處理器定義」;為鏈接器指定依賴的庫lib4cxxs.lib和Ws2_32.lib,設置位置為「項目->屬性->配置屬性->鏈接器->輸
入->附加依賴項」。
l 動態鏈接情況下只需要為鏈接器指定依賴的庫lib4cxxs.lib即可,設置方式同上。

3. 示例代碼
本節展示了一個最簡單的log4cxx示例,以便你可以快速的了解它。
該示例在功能上創建了一個日誌服務,該日誌可通過配置文件進行必要控制,並可以同時向文件和控制台輸出信息。
在實現上,我們採用了一個簡單的控制台程序,並使用動態鏈接庫的方式使用log4cxx。
要實現這個目標,請按如下步驟進行:
1)創建一個名為logdemo的空白win32控制台工程,並按照2.3節所述內容對其進行設置。注意,這里我們使用動態連介面的方式。
2)在logdemo.cpp中加入實現日誌功能的代碼。完成後的代碼清單如下:
#include "stdafx.h"
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>

using namespace log4cxx;

int _tmain(int argc, _TCHAR* argv[])
{
//載入log4cxx的配置文件,這里使用了屬性文件
PropertyConfigurator::configure("log4cxx.properties");

//獲得一個Logger,這里使用了RootLogger
LoggerPtr rootLogger = Logger::getRootLogger();

//發出INFO級別的輸出請求
LOG4CXX_INFO(rootLogger, _T("它的確工作了"));
//rootLogger->info(_T("它的確工作了")); //與上面那句話功能相當

return 0;
}

以Debug方式編譯工程,調試程序直到成功為止。
3)新建一個文本文件,命名為log4cxx.properties,並鍵入如下內容:
# 設置root logger為DEBUG級別,使用了ca和fa兩個Appender
log4j.rootLogger=DEBUG, ca, fa

4)復制log4cxx.dll到輸出目錄。在動態鏈接方式下,應用程序需要能夠找到這個庫文件。
5)運行生成的logdemo.exe文件,查看一下運行結果,看看我們工作有沒有取得成效。如果一切順利,無論是在控制台還是在輸出
文件中,都應該能看到類似下面那樣的輸出內容:
2006-06-02 16:09:50,609 [2528] INFO root - 它的確工作了

4. 體系結構
4.1 核心類
Log4cxx有三個關鍵組件,它們是loggers, appenders和layouts。
Logger是log4cxx的核心類,只要執行日誌操作;looger有層次結構,最頂層為RootLogger;logger是有級別的。每個logger可以附
加多個Appender。Appender代表了日誌輸出的目標,如輸出到文件、控制台等等。對於每一種appender,都可以通過layout進行格
式設置。
這三類組件用示意圖表示如下(不代表類關系):
(TODO:在此對三種組件分別進行說明)
4.2 配置類
此外在使用中還會用到的類有BasicConfigurator、PropertyConfigurator和DOMConfigurator等,用於對log4cxx進行配置。其中:
BasicConfigurator提供了一種簡單配置,包括使用ConsoleAppder作為root appender和PatternLayout作為預設布局。
PropertyConfigurator使用properties文件作為配置方式。
DOMConfigurator則使用properties文件作為配置方式。
(TODO:在此對配置內容進行說明)
5. 實踐指導
在項目中是否使用日誌,以及如何使用日誌,對開發者來說都是一個需要做出的技術選擇,這通常會牽扯到系統的性能,使用日誌
的目的等問題。我們使用日誌的方式,有些是這個行業積累了多年的經驗,有些則純粹關乎個人的喜好。
1)何時使用日誌
通常情況下,日誌的作用在於調試和審計,如果你的項目對此有特殊需求,即可考慮使用日誌。
對於調試,通常用於IDE調試器無法達到的地方。一些常見的場景包括:
分布式組件的調試。在伺服器端的組件,需要通過客戶端的調用來驗證其工作是否正確,此時利用日誌的輸出作為輔助工具對錯誤
進行診斷。
鏈接庫調試。在無法跟蹤進外部庫中的情況下,這種方法非常有效。
生產環境下的調試。生產環境通常是指產品在客戶處處於正式運行的狀態,在出現問題時,開發者常常不在現場,藉助日誌的輸出
進行錯誤判斷就是一個非常有效的手段。
對於審計應用,則需要視特定的情況而定,程序級的記錄能力,無疑可以作為業務級審計手段的有效補充。
無論是在哪種場景下,log4cxx都是可以勝任工作的,這取決於它的靈活的配置能力及多種類型的輸出方式。
2)性能問題
關閉日誌,通過配置文件設置日誌的關閉和打開
使用宏代替logger的輸出命令
選擇性輸出日誌。建立logger的層次結構,根據級別選擇性輸出
輸出目標。盡可能減少輸出目標
選擇合適的輸出格式。使用SimpleLayout將達到與std::cout相當的速度。
3)其它
使用類的全限定名對logger命名
6. 結論
Log4cxx具有的一些顯著特性使得C++者可以將其放入自己的工具箱中,這些特性包括靈活的配置能力,多種輸出手段,豐富的格式
控制,出色的性能。如果在你的開發中需要藉助於日誌進行調試和審計,你也許需要log4cxx。最後,重要的一點是,如你所見,
log4cxx的使用是如此的簡單。

⑦ log4D和log4c是什麼東西

log4c:開源Log工具,在C項目或是C++項目中都是可以使用log4c

如果是殺毒出現,刪了吧,不會對計算機有影響的。

⑧ log4cplus和log4cpp的區別

不太明白是什麼意思 log4cplus輸出的是文本內容,可以定製輸出策略,比如按時間周期輸出,按文件大小輸出,如果你想臨時輸出到其他文件就需要自己寫代碼切換綁定

⑨ log4cpp,log4cplus,log4cxx這幾個包之間是什麼關系

Log4cxx需要依賴於APR。
Log4cpp較log4c移植性稍差些。
Log4c基本上都是一些純c的東西,移植性比其他二者都要好
log4cplus: 簡潔, 下載的包編譯順利, 測試例子也能順利運行。
log4cxx: 臃腫, 需要引用apr(Apache Portable Runtime), 最痛苦的是老是編譯不了。
log4cpp: 落後, 最後更新於2007年,而且下載的包不完整。

⑩ log4是什麼意思

表示數學術語:對數

如果ab=n,那麼logan=b。其中,a叫做「底數」,n叫做「真數」,b叫做「以a為底的n的對數」。logan=b函數叫做對數函數。對數函數中n的定義域是n>0,零和負數沒有對數;a的定義域是a>0且a≠1。

(10)c語言log4c擴展閱讀

對數函數的性質:

1、定點:對數函數的函數圖像恆過定點(1,0)

2、單調性:a>1時,在定義域上為單調增函數

3、0<a<1時,在定義域上為單調減函數

4、奇偶性:非奇非偶函數

5、周期性:不是周期函數

對數函數滿足對數的運演算法則:

1、log(a) (M·N)=log(a) M+log(a) N

2、log(a) (M÷N)=log(a) M-log(a) N

3、log(a) M^n=nlog(a) M

4、log(a)b*log(b)a=1

5、log(a) b=log (c) b÷log (c) a