2016-04-07 44 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