伺服器程式經常需要在命令列中顯示錯誤訊息、狀態或者用來跟蹤程式的執行路徑,最簡單的方法是使用printf。
ace提供了更強大日誌設施:
1、可以在編譯時啟用或禁用巨集;
2、可以動態的啟用或禁用巨集;
3、支援日誌嚴重級別;
4、支援日誌重定向;
5、支援多執行緒安全和執行緒級配置;
使用ace的日誌相關功能,需要引入標頭檔案。
ace日誌輸出
ace提供了兩個巨集來支援日誌輸出:ace_debug、ace_error。
這兩個巨集的內部實現和行為都是一樣,只是為了在語義上區分除錯資訊和錯誤資訊。
在引入標頭檔案前新增以下定義可以關閉日誌輸出,ace_debug、ace_error將被替換為空語句:
#define ace_nlogging 1
ace_debug、ace_error的使用示例:
ace_debug((lm_startup, ace_text("startup.\n")));ace_debug ((lm_debug,
ace_text ("hook2: %d\n"),
*paramp));
ace_error((lm_error, ace_text("config file %s is not found.\n"), szconfigfile.c_str())
使用ace_debug、ace_error巨集需要注意的地方是需要使用兩對括號來包過引數。
第乙個引數是嚴重級別,ace可配置日誌嚴重級別來顯示或關閉該級別的日誌輸出:
lm_debug、lm_error、lm_info、lm_alert、lm_warning等,級別沒有優先順序之分,最常用的是lm_debug、lm_error。
第二個引數支援格式化字串,常用的指令集:
%a:浮點數
%s:字串
%d:十進位制數
%m:嚴重級別
%n:檔名稱
%p:程序id
%t:執行緒id
%d:當前時間
%i:縮排
ace呼叫跟蹤
ace定義了ace_trace巨集用於跟蹤函式的呼叫,具體說就是在其定義的地方產生輸出,在退出其作用域時產生另一條輸出。
ace_trace的實現是被展開為乙個棧上的物件,在其構造和析構函式中分別輸出日誌。
voidfoo()
ace_trace只接收單個字串,不支援格式化字串,輸出的日誌嚴重級別為lm_trace。
ace_trace預設是禁用的,網上經常有朋友反映看不到ace_trace的輸出,而很多回答也是錯的,單純在專案中定義#define ace_ntrace 0也是無法起作用的。
必須在ace/config.h標頭檔案中,在引用其他標頭檔案前定義並且重新編譯ace庫:
#define ace_ntrace 0
ACE服務端程式設計3 ACE跨平台之分配堆記憶體
ace服務端程式設計系列的第三篇,ace解決不同編譯器之間分配堆記憶體的差異。在ace的官方示例中會看到大量的ace new return,ace new這樣的巨集,這是ace為了消除不同編譯器編譯的 在堆上分配記憶體失敗的行為差異。具體來說 使用 malloc calloc 等分配記憶體的函式時,...
ACE服務端程式設計2 ACE跨平台之資料型別和寬字元
ace網路庫的主要優勢之一就是跨平台,ace提供了作業系統api和編譯器級別的跨平台解決方法,使開發人員不用再去關心作業系統和編譯器的差異,但因此也帶來了ace的複雜性。而不同的c 編譯器在以下方面也有明顯的差異 1 模版 2 資料型別和寬字元 3 執行時初始化和關閉 4 分配堆記憶體 以上主要參考...
基於ACE的網路服務端通訊程式設計
完成了基本的通訊功能 測試報告如下 昨天準備11臺 只有7臺機子可以執行 每個開了10個 大部分 都好的 有1台開10個的時候出錯 還有1臺早上看的時候10個都出錯 根據上面的圖顯示結果來看是由於服務端先關閉,客戶端傳送資料失敗導致。源 如下 class clientacceptor public ...