Asp.Net Core2.0で開発されたWebApiプロジェクトにSerilogを統合しました。これはProgram.cs
の構成コードです。
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
デバッグ中にログを完全に確認できました。
これで、サービスをAPIアプリとしてAzureにデプロイします。
Azure Portalのログストリーム拡張機能を介して本番環境でログを表示するには、どの構成を適用する必要がありますか?
私の知る限り、Serilog.Sinks.ConsoleはログイベントをWindowsコンソールに書き込みます。ただし、アプリケーションをAzureに公開すると、コンソールは直接表示されません。
コンソールの代わりに Serilog.Sinks.RollingFile または Serilog.Sinks.ApplicationInsights を使用してログイベントを書き込むことを検討することをお勧めします。
Serilog.Sinks.RollingFileまたはSerilog.Sinks.ApplicationInsightsの使用方法については、以下のコードを参照してください。
まず、Nugetから Serilog.AspNetCore および Serilog.Sinks.RollingFile パッケージをインストールします。
次に、以下のコードを使用して情報をログに記録できます。
//if you want to use ApplicationInsights just change the write to's method as Serilog.Sinks.ApplicationInsights links shows
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.RollingFile("log-{Date}.txt")
.CreateLogger();
Log.Information("This will be written to the rolling file set");
イベントをログに記録するためのtxtファイルが自動的に作成されます。
このような結果は、アプリケーションのwwwrotパスで見つけることができます。
更新:
Serilogを使用してログをAzureログストリームに記録する場合は、最初にWebアプリで[診断ログ]を有効にする必要があります。次に、Serilogを使用して、ファイルをAzureのデフォルトの「診断ログ」フォルダーに記録できます。例:D:\ home\LogFiles\http\RawLogs。その後、ログはログストリーミングに表示されます。
以下のコードを使用してテストします。
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.File(@"D:\home\LogFiles\http\RawLogs\log.txt")
.CreateLogger();
Log.Information("This will be written to the rolling file set");
そして、診断ログを有効にします。
次に、ログストリームを開き、アプリケーションログを見つけます。
ログがすでにlog-Steamにログインしていることがわかります。
フォルダ: