log4cxx — is it possible to configure a custom appender with custom arguments from a config file?

筅森魡賤 提交于 2019-12-12 02:53:31

问题


I need to write a custom appender in log4cxx. This answer describes how to do it. In Java, in log4j, it is possible for a custom appender to devise custom parameters. I add a property and a getter and setter:

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

Then I can use myParameter in configuration file, and the framework somehow knows how to configure my appender with it.

Question: does log4cxx have a similar capability? For me it is enough if I get a map map<string, string> with properties.


回答1:


Ok, figured out the answer myself. You need to override member function setOption. It will get called a number of times: once per each read option. You then override function activateOptions and its get called after all options have been processed. It can be used as a trigger to initialize the appender with the read parameters.

Not as convenient as mapping to getters/setters, but it gets the job done:

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);
  }
};


来源:https://stackoverflow.com/questions/36480009/log4cxx-is-it-possible-to-configure-a-custom-appender-with-custom-arguments-f

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!