3

長すぎると感じるものを検索した後、stackoverflow で次の簡単な質問をすることにしました: log4cplus (1.1.2) のカスタム レイアウトを作成するにはどうすればよいですか? 最も関連性の高い質問は、log4cplus にカスタム フィルターを追加するにはどうすればよいですか? です。作成者は新しいクラスを直接 log4cplus ディレクトリに追加します (または log4cplus 名前空間を使用しますか?)。log4plus ヘッダーとライブラリは個別にインストールされるため、このオプションはありません (名前空間を log4cplus に設定するだけでは機能しません。

私が試したのは、log4cplus::PatternLayout から継承した最小限の例です。

namespace myNameSpace {
  class LOG4CPLUS_EXPORT MyPatternLayout: public ::log4cplus::PatternLayout {
    public:
       MyPatternLayout(const log4cplus::tstring& pattern);
       MyPatternLayout(const log4cplus::helpers::Properties& properties);
      ~MyPatternLayout();
    private:
      // Disallow copying of instances of this class
      MyPatternLayout(const MyPatternLayout&);
      MyPatternLayout& operator=(const MyPatternLayout&);
};
}

LOG4CPLUS_EXPORT がクラスを log4cplus フレームワークに登録して、構成ファイルで使用できるようにすることを期待しています。ただし、追加

log4cplus.appender.STDOUT.layout=myNameSpace::MyPatternLayout

エラーが発生します。

log4cplus:ERROR Cannot find LayoutFactory: "myNameSpace::MyPatternLayout"

では、カスタム Layout/Appender を登録するにはどうすればよいですか?

4

1 に答える 1

0

多くのことを試した後log4cplus::initialize();、 の前後に配置する必要がある 1 つの単純なエントリに要約されlog4cplus::PropertyConfigurator::doConfigure("<path to config file");ます。名前空間に新しいレイアウトを追加したい場合は、log4cplus簡単にできます

//example1
log4cplus::initialize();
// register our stuff
log4cplus::spi::LayoutFactoryRegistry& reg = log4cplus::spi::getLayoutFactoryRegistry();
LOG4CPLUS_REG_LAYOUT(reg, MyPatternLayout);
log4cplus::PropertyConfigurator::doConfigure(Logger::mConfigFile);

または、独自の名前空間を使用する場合

 //example2
 log4cplus::initialize();
 // register our stuff
 log4cplus::spi::LayoutFactoryRegistry& reg = log4cplus::spi::getLayoutFactoryRegistry();
 LOG4CPLUS_REG_PRODUCT (reg, "myNamespace::", MyPatternLayout, myNamespace::, log4cplus::spi::LayoutFactory);
 log4cplus::PropertyConfigurator::doConfigure(Logger::mConfigFile);

その後、構成でレイアウトを次のように使用できます。

log4cplus.appender.STDOUT.layout = log4cplus::MyPatternLayout #example 1

また

log4cplus.appender.STDOUT.layout = myNamespace::MyPatternLayout #example 2

簡単ですよね?log4cplus に .log4j に近いドキュメントがあればいいのにと思います

于 2015-11-19T13:42:25.243 に答える