15

Topshelf と Serilog (それぞれ Serilog.Extras.Topshelf パッケージ) を使用して、Windows サービスの単純なログ構成をセットアップしようとしています。

HostLogger.UseLogger(new SerilogHostLoggerConfigurator(new LoggerConfiguration()
                .WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log")
                .WriteTo.ColoredConsole()
                .MinimumLevel.Debug()
                .CreateLogger()));
HostFactory.Run(x => {
            x.UseSerilog();
            ...

サービスは正常に実行されますが、コンソールにも指定されたログ ファイルにも出力されません (作成されていることがわかりますが、空のままです)。両方のフレームワークを使用した経験のある人はいますか?

4

1 に答える 1

16

2 番目の呼び出し "x.UseSerilog()" は、設定していない Serilog のグローバル インスタンス (Log.Logger) を使用するように TopShelf の HostLogger をリセットします。

2 番目の呼び出しを削除すると、ログが機能し始めます。

もう 1 つのオプションは、グローバル ロガーを構成することです。

Log.Logger = new LoggerConfiguration()
            .WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log")
            .WriteTo.ColoredConsole()
            .MinimumLevel.Debug()
            .CreateLogger();

HostFactory.Run(x => {
        // configure TopShelf to use Serilog's global instance.
        x.UseSerilog();
}
于 2015-05-09T02:46:56.310 に答える