長すぎると感じるものを検索した後、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"
では、カスタムレイアウト/アペンダーを登録するにはどうすればよいですか?
多くのことを試した後、それは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に近いドキュメントがあればいいのにと思います
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加