3

DLL で Log4Cplus を使用するベスト プラクティスは何ですか?

FileAppender を使用したい。

DLLMain と 3 つのエクスポートされた関数を持つ win32 DLL があります。

Appender と Layout オブジェクトはどこで定義しますか? プロパティをどこに設定しますか? それらを logger にリンクする場所は?

呼び出すだけで推測するdll内のすべてのクラスでロガーを使用したい:

Logger myLogger= Logger::getInstance("myLoggerName");

log4cplus マクロを有効にして、dll 内のすべての関数で動作させるには、どこにコードを配置すればよいですか?

通常のプログラムでは、グローバル変数を使用し、main またはいくつかの ctor を使用してそれらを設定すると、すべてがそれらを見ることができます。dll 内で何をしますか?

(エクスポートされたすべての関数でセットアップ コードを呼び出したくはありませんが、dll が読み込まれたときに 1 回だけ呼び出します)

4

1 に答える 1

2

Appender オブジェクトと Layout オブジェクトはどこで定義しますか? プロパティをどこに設定しますか? それらをどこでロガーにリンクしますか?

一般に、DLLにはMyDLLInit()、必要に応じて log4cplus を構成する呼び出し可能な関数が必要だと思います。

log4cplus マクロを有効にして、DLL 内のすべての関数で動作させるには、どこにコードを配置すればよいですか?

ここで特別なことをする必要はありません。loggingmacros.hマクロを取得して使用するには、 を含めるだけです。

通常のプログラムでは、グローバル変数を使用し、main またはいくつかの ctor を使用してそれらを設定すると、すべてがそれらを見ることができます。DLL 内で何をしますか?

グローバルLoggerインスタンス(MyDLLInit()関数によって初期化される)を使用しても問題ないように思えます。ただし、DLL に、ユーザーに返すある種の「コンテキスト」ハンドルがある場合は、代わりにそれを使用し、代わりにLoggerインスタンスを「コンテキスト」ハンドルに貼り付けます。

(エクスポートされたすべての関数でセットアップ コードを呼び出したくはありませんが、dll が読み込まれたときに 1 回だけ呼び出します)

これは必要ありません。

ソース配布の一部であるテスト ソースを参照し、それらをインスタンス化する方法の例として使用してAppenderくださいLayout。例えば、fileappender_test

アップデート

Appender または Layout を独自の変数に保持する必要はありません。どちらも log4cplus で管理されています。実行した後(上記のリンクのlogger.addAppender(myappender)23 行目に対応)、 Appender は Logger によって管理され、Appender のレイアウトは Appender によって管理されるため、を含むすべての変数が範囲外になり、破棄される可能性があります。fileappender_testmyappender

于 2013-09-18T20:00:00.427 に答える