ASP.NET CoreとSerilogでログをファイル出力する
本章では、ASP.NET Coreでログを利用できるように設定します。
はじめに
ASP.NET Coreでは、標準でロギングのフレームワークが提供されています。しかし機能は、充実しておらず、自前で実装するか外部のプロバイダを利用する必要があります。今回は、Serilogが提供するロギング機能を利用し、ログファイルを出力する設定を行います。
準備
ライブラリのインストール
まず、プロジェクトに以下ライブラリをNuGetからインストールします。
- Serilog.Extensions.Logging.File
なお今回使用するライブラリの詳細は、以下リンク先に記載されています。
github.com
実装
そして実装で出力の流れについて説明します。Startupクラスで、Serilogのファイル出力ライブラリを読み込み設定します。
【Startup.cs】
public class Startup { public static IConfigurationRoot Configuration { get; private set; } public Startup(IHostingEnvironment env) { // appsettings.jsonファイルの読み込み var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); } public void ConfigureServices(IServiceCollection services) { var mvc = services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { // Serilogを使用してファイルにログを出力 loggerFactory.AddFile(Configuration.GetSection("Logging")); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{param?}"); }); } }
ログを出力する方法は、以下の通り、コントローラーやサービスでロギングのサービスを注入して利用します。
【Controllers/HomeController.cs】
public class HomeController : Controller { readonly ILogger<HomeController> log; public HomeController(ILogger<HomeController> _log) { log = _log; } public ActionResult Index() { log.LogInformation("Hello, world!"); return View(); } }
【Views/Home/Index.cshtml】
Hello, world!
実際に出力されたログは以下の通りです。プロジェクトフォルダの直下「logs」フォルダ内に、ログファイルが日付単位で出力されます。
2016-11-02T20:35:44.6165321+09:00 0HL032HH1KVM5 [INF] Request starting HTTP/1.1 DEBUG http://localhost:49783/ 0 (e5be5b71) 2016-11-02T20:35:44.6165321+09:00 0HL032HH1KVM4 [INF] Request starting HTTP/1.1 GET http://localhost:49783/ (e5be5b71) 2016-11-02T20:35:44.7526293+09:00 0HL032HH1KVM5 [INF] Request finished in 131.352ms 200 (15c52c40) 2016-11-02T20:35:45.5942266+09:00 0HL032HH1KVM4 [INF] Executing action method "Web.Controllers.HomeController.Index (Web)" with arguments (null) - ModelState is Valid (ba7f4ac2) 2016-11-02T20:35:45.6022348+09:00 0HL032HH1KVM4 [INF] Hello, world! (f83bcf75) 2016-11-02T20:35:48.0518997+09:00 0HL032HH1KVM4 [INF] Executing ViewResult, running view at path "/Views/Home/index.cshtml". (9707eebe) 2016-11-02T20:35:48.2740576+09:00 0HL032HH1KVM4 [INF] Executed action "Web.Controllers.HomeController.Index (Web)" in 2800.2296ms (afa2e885) 2016-11-02T20:35:48.3100849+09:00 0HL032HH1KVM4 [INF] Request finished in 3730.3904ms 200 text/html; charset=utf-8 (15c52c40) 2016-11-02T20:35:48.6308175+09:00 0HL032HH1KVM6 [INF] Request starting HTTP/1.1 GET http://localhost:49783/favicon.ico (e5be5b71) 2016-11-02T20:35:48.6358213+09:00 0HL032HH1KVM6 [INF] Request finished in 5.1298ms 404 (15c52c40)
筆休め
ログは、システムに障害があった場合の原因究明やパフォーマンスの確認といった、業務で発生した事実の確認やサービス向上のために重要な情報となります。そのため、サービスを本格開発する前に、仕組みを用意することが重要となります。
以上、「ASP.NET CoreとSerilogでログをファイル出力する」でした。