1

クラス ライブラリがあるコア dll の開発に取り組んでいます。log4net を使用して、例外のログを有効にしたいと考えています。クラス ライブラリに app.config ファイルがあり、そこで log4net の設定を指定しました。ただし、クラス ライブラリをテストすると、呼び出し元のプロジェクトに app.config を追加するまで、log4net はログを作成しません。 [assembly: log4net.Config.XmlConfigurator(Watch = true)] をクラス ライブラリの assemblyinfo.cs に追加し、log4net.ILog logger = log4net.LogManager.GetLogger(typeof(ErrorHandler)) を使用しています。ここで、ErrorHandler は名前です。 log4netの呼び出し関数が処理されるクラスライブラリのクラスの.何がうまくいかないのかについてのアイデアはありますか?

第二に、私が達成したいのは、私のdllのユーザーがログを作成したい場所を渡すだけで、イベントビューアーでログを作成するか、app.configからログファイルを作成するか? log4net のその他の設定は処理されません。

最初の問題と 2 番目の問題に対する提案やコード スニペットはありますか?

4

1 に答える 1

1

.Net アプリケーションでは、「メイン」の app.config のみがアクティブです。ライブラリ構成ファイルは単に無視されます。設定をメイン構成ファイルに転送するか、log4net の外部構成ファイルを使用します。次に、たとえば次のように構成します(log4net.configと呼ぶと仮定します):

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

構成ファイルの構造が少し異なることに注意してください。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="YourAppender" type="..." >
      ....
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="YourAppender" />
    </root>
</log4net>

2番目の問題については、これがどれほど柔軟でなければならないかわかりません。ファイルアペンダーからイベントログアペンダーに切り替えるだけですか? あなたの答えに応じて、構成ファイル (file.log4net と eventlog.log4net など) の 2 つの準備を検討し、必要に応じて構成を読み取ることができます (その場合、属性を使用できません:Configure()メソッドを直接呼び出します)。複雑なため、log4net をプログラムで構成することになるかもしれません。

于 2012-06-30T10:04:20.707 に答える