0

私のソリューションには、クラス ライブラリ タイプの 2 つのプロジェクトがあります。

  1. アクション: ホワイト (MS UI オートメーション上の UI オートメーション フレームワーク) を使用して記述されたアクションを含むプロジェクト
  2. テスト: MbUnit を使用して、テスト フィクスチャとテスト メソッドを使用してプロジェクトを作成します。

両方のプロジェクトに log4net を使用してログを追加することにしました。私が使用しているlog4net構成は以下のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString"
          value="c:/AutomationLog/Automation_%date{dd.MM.yy_HH.mm.ss}.log" />
    <appendToFile value="false" />
    <rollingStyle value="Once" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="10MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{HH:mm:ss,fff} %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
  <logger name="root">
    <level value="OFF" />
  </logger>
</log4net>

実行ごとに 1 つのファイルが作成されるようにします (フィクスチャ スイートの実行ごとに 1 つ)。ただし、次の 2 つのファイルが作成されます。

Automation_27.01.13_07.33.53.log

Automation_27.01.13_07.33.53.log.1

調査の結果、ログが同じ場所で毎回 2 番目のファイルに吐き出されることがわかりました。アクションに White からのタイプが含まれている場合に呼び出されます。ホワイトも内部でlog4netを使用しているために発生しているようです。

だから、私は状況が次のようなものだと思います:

  1. log4netを初期化するクラスがあります
  2. フィクスチャスイートを開始します
  3. テスト プロジェクトには、1st を実行するクラスがあり、これには以下が含まれます。Log.Info("...")
  4. ログファイルが作成されます
  5. までテキストが追加されます。
  6. ホワイトの型を参照する最初のアクションは、tests プロジェクトから実行されます
  7. この段階で、新しいファイルが作成されます
  8. White Dllsの内部にlog4netを初期化するための別の呼び出しがあり、内部でハードコードされているために発生すると思います

White (サードパーティの dll) のコードを変更せずにログの分割を防ぐ方法はありますか?

4

1 に答える 1

0

構成ファイルの名前を変更するだけで問題を解決しました。白はlog4net.config名を探します。しかし、私はまだ答えを得ていません.log4netを強制的に1回だけ初期化し、将来の試行をスキップする方法は可能ですか.

于 2013-01-29T19:37:02.070 に答える