ASP.NET WebAPIで処理されなかった例外をハンドリングし、ログを出力する方法
本記事では、ASP.NET WebAPIで一切処理されなかった例外を
ハンドリング(グローバルハンドリング)し、ログを出力する方法を紹介していきます。
本記事の内容です。
例外ハンドリングクラスを作成する
今回は、GlobalExceptionLogger.csという名前でファイルを作成しています。内容は下記の通りです。
ログ出力は、log4netを使用しています。
using System.Web.Http.ExceptionHandling; using log4net; namespace Hoge.Exceptions { public class GlobalExceptionLogger : ExceptionLogger { private readonly ILog log = LogManager.GetLogger("Error"); public override void Log(ExceptionLoggerContext context) { // ログ出力処理 log.Error(context.Exception); } }
例外ハンドリングクラスをサービス登録する
上記で作成したクラスを、App_Start下のWebApiConfig.cs内でサービス登録します。方法は下記の通りです。
using System.Web.Http; using System.Web.Http.ExceptionHandling; using Hoge.Exceptions; namespace Hoge { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API の設定およびサービス // Web API ルート config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // ここで例外をハンドリングするクラスをサービス設定 config.Services.Replace(typeof(IExceptionLogger), new GlobalExceptionLogger()); } } }