2016-04-07 73 views
0

我需要在log4cxx中寫一個自定義appender。 This answer描述瞭如何去做。在Java中,在log4j中,自定義appender可以設計自定義參數。我添加屬性和getter和setter:log4cxx - 是否可以使用配置文件中的自定義參數配置自定義appender?

private int myParameter = 0; 
public void setMyParameter(int p) { myParameter = p; } 
public int getMyParameter() { return myParameter; } 

那麼我可以用配置文件myParameter和框架某種程度上知道如何配置我的appender它。

問題:確實log4cxx有類似的能力嗎?對我而言,如果我得到一張具有屬性的地圖map<string, string>就足夠了。

回答

0

好的,自己想出了答案。您需要覆蓋成員函數setOption。它會被調用多次:每個讀取選項一次。然後重寫函數activateOptions及其所有選項處理完畢後調用它。它可以用作觸發器,用讀參數初始化appender。

不是很方便的映射getter/setter方法,但它能夠完成任務:

class CustomAppender : public AppenderSkeleton 
{ 
    int _myParameter = 0; 
    void initialize(int myParameter); 
    // ... 

public: 
    void setOption(LogString const& option, LogString const& value) override 
    { 
    if (option == "MyParameter") try 
    { 
     _myParameter = boost::lexical_cast<int>(value); 
    } 
    catch (boost::bad_lexical_cast const&) { 
     // go with default 
    } 
    } 

    void activateOptions(helpers::Pool &) override 
    { 
    initialize(_myParameter); 
    } 
}; 
+0

謝謝你的提示!你在使用ReSharper嗎? +1個字符選項卡上的+1。搖晃的'嘗試'很奇怪。 – bvj