2015-10-22 56 views
1

我正在使用Poco :: Logger在我的應用程序中跟蹤日誌。Poco Logger更改消息參數

現在我想跟蹤所有日誌中的變量值。因爲我不想改變之前輸出行的每一行。我想讓它在格式中默認。

我檢查的文件和波科測井系統的教程,並發現:

  • 的消息可存儲的名稱 - 值對的任意數量。
  • 名稱和值可以是任意字符串。
  • 消息參數可以在格式化程序中引用。

它看起來像我正在尋找。但是我找不到關於這個的詳細信息,看起來Poco :: logger自己創建了Poco :: Message。

有什麼辦法可以實現我想要做的事情嗎?謝謝。

+0

我不熟悉POCO的日誌框架。似乎['Poco :: Logger :: setProperty()'](http://www.appinf.com/docs/poco/Poco.Logger.html#17278)_「只有」channel「和」level 「屬性被支持」_,這不是你所需要的。但是,您可以使用['Poco :: Message :: set()'](http://www.appinf.com/docs/poco/Poco.Message.html#18324)來追加所需的值追蹤。 – 865719

回答

2
#include "Poco/Logger.h" 
#include "Poco/AutoPtr.h" 
#include "Poco/PatternFormatter.h" 
#include "Poco/FormattingChannel.h" 
#include "Poco/ConsoleChannel.h" 
#include "Poco/Message.h" 

using namespace Poco; 

int main() 
{ 
    Message msg; 
    msg.setSource("MySource"); 
    msg.setText("My message text"); 
    msg["myParam"] = "My Param"; 

    AutoPtr<FormattingChannel> pFCConsole = new FormattingChannel(new PatternFormatter("%s: %[myParam], %t")); 
    pFCConsole->setChannel(new ConsoleChannel); 
    pFCConsole->open(); 

    Logger& consoleLogger = Logger::root(); // or whatever your logger is 
    consoleLogger.setChannel(pFCConsole); 
    consoleLogger.log(msg); 

    return 0; 
} 

運行:

$ ./Logger 
MySource: My Param, My message text 

只有std::string自定義參數,目前支持,所以你將不得不做轉換,如果值是數字。

+0

謝謝。但我的問題是,我想添加「myParam」到我用來直接使用信息/警告/錯誤記錄我的消息的任何地方。無論如何,這樣的事情在每個地方都沒有改變? – fabregaszy

+0

是的,當然。我修改了答案中的代碼以顯示如何。現在,如果你想使用error(),information()等,你必須用這些方法將原始記錄器包裝到一個類中,然後在內部構造消息,然後將它傳遞給原始記錄器。 – Alex

+0

很多感謝,通過編寫一個包裝類解決了問題。 – fabregaszy