日誌列印怎麼在編譯器中看
Ⅰ 如何實現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的使用是如此的簡單。
Ⅱ C++日誌系統性能分析與優化
日誌系統在大型軟體項目中的重要性不言而喻,它們幫助我們追蹤代碼行為、診斷問題,是解決問題的關鍵工具。然而,日誌系統不當使用也可能成為性能瓶頸,本文將深入探討日誌系統的性能分析與優化。
日誌列印與優化
日誌系統提供兩種主要的調用方式:print和stream。通過使用日誌等級進行輸出優化,我們可以在程序運行時動態控制日誌輸出,減少不必要的列印。例如,設置日誌級別為INFO時,僅輸出INFO、WARN、ERROR、FATAL級別的日誌,而TRACE和DEBUG級別日誌被過濾。在實際工程中,通常設置為INFO級別或以下,確保開發調試階段有足夠的信息,而在線運行時,僅輸出更關鍵的ERROR和FATAL級別日誌。建議將日誌級別設為INFO,因其信息量較少,不會成為性能瓶頸。
宏優化日誌調用
雖然日誌級別優化了日誌輸出,但並未減少日誌調用次數。實際上,對於復雜的日誌系統,這可能導致大量調用指令的生成,浪費性能。為了避免此問題,C++中常用宏來控制無效指令的生成。例如,僅在滿足特定條件時執行日誌調用。這樣不僅減少了不必要的代碼執行,而且在實際使用中更簡潔、高效。
流式日誌輸出與性能考量
大多數日誌系統還提供流式輸出方式,如iostream風格的日誌輸出。這種操作雖然方便,但可能影響性能。分析表明,流式輸出會導致額外的函數調用,影響效率。然而,通過定義支持流操作的日誌類並利用編譯器優化,可以顯著減少此類開銷。避免不必要的函數調用,是優化流式日誌輸出的關鍵。
性能優化建議
綜合考慮,使用print方式輸出日誌通常能提供更好的性能。雖然格式化列印(如std::format)在現代C++中提供了更友好、強大的日誌能力,但對於性能敏感的場景,直接使用print方式更為合適。推薦使用spdlog等庫,它既支持傳統的print調用,也提供流式輸出,並能完美結合宏優化,實現高效日誌記錄。
Ⅲ spyder consoles 怎麼使用 python console
1、在spyder編譯器的窗口裡面,找到tools菜單列表,打開Preferences對話框。
6、燃盡就可以運行了。
Ⅳ Eclipse運行時找不到ANT文件
1.在Myeclipse中經常用到ant工具來編譯java工程。
2.選擇ant工具的步驟如下:
Windows->Shown
view->Ant
這樣就出項了ant視圖框。在ant視圖框中單擊右鍵,選擇addBuilderfile添加ant編譯文件。
添加好ant編譯文件後,我們還需要對編譯文件進行設置:選中編譯文件,右鍵單擊選擇Run
As->external Tools configurations彈出ant編譯的配置框。
3.在編譯ant文件時,遇到編譯進程卡住現象,這是因為ant編譯器找不到日誌輸出文件造成的。可以在ant編譯框中的Main->Argument文本框中添加如下語句:-logger
org.apache.tools.ant.NoBannerLogger,這樣指定ant編譯時的日誌編譯器。
Ⅳ c#中如何調用C編譯器
C的編譯器?比如gcc?
在.net中可以啟用一個cmd.exe進程來執行命令行命令。這個命令行裡面可以調用gcc來實現你需要的對C語言進行編譯的業務。
string cmdLine="xxxx\\xxxxx\\gcc.exe xxxxxxxxxxx";
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.Start();
p.StandardInput.WriteLine(cmdLine);
p.WaitForExit();
p.Close();
如果在BS中寫這些的話,我覺得首先需要把gcc的路徑變成絕對路徑,然後保證IIS的運行身份對gcc日誌,源文件,目的地的相應許可權。