2016-04-07 14 views
0

log4cxxにカスタムアペンダーを書く必要があります。 This answerにはその操作方法が記載されています。 Javaでは、log4jでは、カスタムアペンダーがカスタムパラメーターを考案することができます。log4cxx - 設定ファイルのカスタム引数を使用してカスタムアペンダーを設定することは可能ですか?

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

それから私は、設定ファイルにmyParameterを使用することができ、およびフレームワークが何とかそれを私のアペンダを設定する方法を知っている:私は、プロパティとゲッターとセッターを追加します。

質問: log4cxxも同様の機能を備えていますか?私にとっては、マップをmap<string, string>のプロパティで取得すれば十分です。

答えて

0

[OK]を、自分自身の答えを考え出した。メンバー関数setOptionを無効にする必要があります。それは何度も呼び出されます:それぞれの読み取りオプションごとに1回。次に、すべてのオプションが処理された後に関数activateOptionsをオーバーライドし、getを呼び出します。読み取りパラメータでアペンダを初期化するためのトリガとして使用できます。

ないようゲッター/セッターへのマッピングなどの便利な、それは仕事を取得:先端のための

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を使っていますか? 2つの文字タブの+1ぶら下がっている「試着」は奇妙です。 – bvj

関連する問題