私のソリューションには、クラス ライブラリ タイプの 2 つのプロジェクトがあります。
- アクション: ホワイト (MS UI オートメーション上の UI オートメーション フレームワーク) を使用して記述されたアクションを含むプロジェクト
- テスト: 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を使用しているために発生しているようです。
だから、私は状況が次のようなものだと思います:
- log4netを初期化するクラスがあります
- フィクスチャスイートを開始します
- テスト プロジェクトには、1st を実行するクラスがあり、これには以下が含まれます。
Log.Info("...")
- ログファイルが作成されます
- までテキストが追加されます。
- ホワイトの型を参照する最初のアクションは、tests プロジェクトから実行されます
- この段階で、新しいファイルが作成されます
- White Dllsの内部にlog4netを初期化するための別の呼び出しがあり、内部でハードコードされているために発生すると思います
White (サードパーティの dll) のコードを変更せずにログの分割を防ぐ方法はありますか?