程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ACE服務端編程5:ACE日志輸出和跟蹤,ace服務端

ACE服務端編程5:ACE日志輸出和跟蹤,ace服務端

編輯:C++入門知識

ACE服務端編程5:ACE日志輸出和跟蹤,ace服務端


服務器程序經常需要在命令行中顯示錯誤消息、狀態或者用來跟蹤程序的執行路徑,最簡單的方法是使用printf。

ACE提供了更強大日志設施:

1、可以在編譯時啟用或禁用宏;

2、可以動態的啟用或禁用宏;

3、支持日志嚴重級別;

4、支持日志重定向;

5、支持多線程安全和線程級配置;

使用ACE的日志相關功能,需要引入<ace/Log_Msg.h>頭文件。

ACE日志輸出


ACE提供了兩個宏來支持日志輸出:ACE_DEBUG、ACE_ERROR。

這兩個宏的內部實現和行為都是一樣,只是為了在語義上區分調試信息和錯誤信息。

在引入<ace/Log_Msg.h>頭文件前添加以下定義可以關閉日志輸出,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的實現是被展開為一個棧上的對象,在其構造和析構函數中分別輸出日志。

void foo()
{
    ACE_TRACE(ACE_TEXT("foo\n"))
    int a = 0;
    int b = 0;
    int c = b;
}

ACE_TRACE只接收單個字符串,不支持格式化字符串,輸出的日志嚴重級別為LM_TRACE。

ACE_TRACE默認是禁用的,網上經常有朋友反映看不到ACE_TRACE的輸出,而很多回答也是錯的,單純在項目中定義#define ACE_NTRACE 0也是無法起作用的。

必須在ace/config.h頭文件中,在引用其他頭文件前定義並且重新編譯ACE庫:

#define ACE_NTRACE 0

記錄,為更好的自己!轉載請注明出處!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved