TopShelf を実行し、内部で OWIN を実行するログ機能として Serilog を使用する小さなコンソール アプリケーションがあります。ただし、アプリ ビルダーを起動するとすぐに、トレース リスナーを介してすべてのログ メッセージが複製され、コンソールに 2 回出力されます。
// serilog sink configuration
new LoggerConfiguration()
.WriteTo.Trace()
...
.CreateLogger();
// topshelf
HostLogger.UseLogger(new SerilogLogWriterFactory.SerilogHostLoggerConfigurator());
私はすでにこの回答をここで見つけており、Web ホストを開始する前に以下を含めました。
webHostOptions.Settings.Add(typeof (ITraceOutputFactory).FullName,
typeof (WebAppBuilder.NullTraceOutputFactory).AssemblyQualifiedName);
Trace.Listeners.Remove("HostingTraceListener");
面白いことに、これらの行を挿入した後に最初にアプリケーションを起動したとき、機能しました (たとえば、二重のメッセージはなくなりました)。ただし、\bin
ディレクトリをクリーンアップした後、再び表示されるようになりました。どうする?
この問題をさらに説明するために、私が作成したこの非常に専門的な図を確認してください。