Template Studio for WPFで作成したプロジェクトへのログ出力の追加
Template Studio for WPFのテンプレートでMVVM Toolkitを選択して作成したプロジェクトに外部ファイルへのログ出力を追加する場合のメモ。
テンプレートを使用した場合、Generic Hostが設定されているためそれを利用する。
NuGetパッケージの追加
外部ファイルにログを出力するために、Serilogを使用。NuGetで以下のパッケージをインストールする。
- Serilog
- Serilog.Extentions.Hosting
- Serilog.Sinks.File
- Microsft.Extentions.Logging
アプリ内でログの出力構成を設定する場合
App.xaml.cs
ファイルを開き、ConfigureLogging
を追加する。アプリと同じ場所にlog[日付].txtというログファイルを出力する場合は以下のように設定する。
App.xaml.cs1 private async void OnStartup(object sender, StartupEventArgs e) { 2 var appLocation = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 3 4 _host = Host.CreateDefaultBuilder(e.Args) 5 .ConfigureAppConfiguration(c => { 6 c.SetBasePath(appLocation); 7 }) 8 .ConfigureServices(ConfigureServices) 9 .ConfigureLogging((context, builder) => { 10 builder.ClearProviders(); 11 12 var _logger = new LoggerConfiguration() 13 .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day) 14 .CreateLogger(); 15 16 builder.AddSerilog(_logger); 17 }) 18 .Build(); 19 20 await _host.StartAsync(); 21 }
出力構成を外部ファイルで設定する場合
appsettings.json
ファイルを使用して、環境によって構成を変える場合は以下のように設定する。
NuGetで以下のパッケージを追加インストールしておく。
- Serilog.Settings.Configuration
ConfigurationBuilder
でappsettings.jsonファイルを読み込み、LoggerConfigurationに読み込ませる。
App.xaml.cs1 private async void OnStartup(object sender, StartupEventArgs e) { 2 var appLocation = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 3 4 _host = Host.CreateDefaultBuilder(e.Args) 5 .ConfigureAppConfiguration(c => { 6 c.SetBasePath(appLocation); 7 }) 8 .ConfigureServices(ConfigureServices) 9 .ConfigureLogging((context, builder) => { 10 builder.ClearProviders(); 11 12 var configuration = new ConfigurationBuilder() 13 .SetBasePath(Directory.GetCurrentDirectory()) 14 .AddJsonFile("appsettings.json") 15 .Build(); 16 17 var _logger = new LoggerConfiguration() 18 .ReadFrom.Configuration(configuration) 19 .CreateLogger(); 20+ 21 builder.AddSerilog(_logger); 22 }) 23 .Build(); 24 25 await _host.StartAsync(); 26 }
appsettings.jsonファイルには以下のように設定する。
appsettings.json1{ 2 "Serilog": { 3 "Using": [ "Serilog.Sinks.File" ], 4 "WriteTo": [ 5 { 6 "Name": "File", 7 "Args": { 8 "path": "log.txt", 9 "rollingInterval": "Day" 10 } 11 } 12 ] 13 } 14}