log4cxx - 是否可以使用配置文件中的自定义参数配置自定义appender?

时间:2016-04-07 14:59:17

标签: log4cxx

我需要在log4cxx中编写自定义appender。 This answer描述了如何做到这一点。在Java中,在log4j中,自定义appender可以设计自定义参数。我添加了一个属性,一个getter和setter:

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

然后我可以在配置文件中使用myParameter,框架以某种方式知道如何使用它配置我的appender。

问题: log4cxx有类似功能吗?对我来说,如果我得到一张带有属性的地图map<string, string>就足够了。

1 个答案:

答案 0 :(得分:0)

好的,我自己想出了答案。您需要覆盖成员函数activateOptions。它将被调用多次:每个读取选项一次。然后覆盖函数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); } }; ,并在处理完所有选项后调用它。它可以用作触发器,用读取参数初始化appender。

不如映射到getter / setter那么方便,但它完成了工作:

statement = $scope.allStatements[i+1]