1、NLogをインストールする
Install-Package NLog.Config
2、NLog.configを編集する(NLog.configをインストールすると生成される)
3、ログの書き出し(コントローラーの開始と終了)
一:NLogの読み込みとエラー時のログ書き込みの実装
public static void Main(string[] args) { // nlog.configの読み込み. var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); try { CreateWebHostBuilder(args).Build().Run(); } catch (Exception ex) { logger.Error(ex, "Stopped program because of exception"); throw; } finally { LogManager.Shutdown(); } }
二:NLog以外のProviderの無効化
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging((hostingContext, logging) => { // NLog 以外で設定された Provider の無効化. logging.ClearProviders(); }) .UseNLog();
三:アクションフィルターの実装
public class SampleActionFilter : IActionFilter { public const string PERIOD = "authentication_period"; private readonly ILogger _logger; public SampleActionFilter(ILogger<SampleActionFilter> logger) { _logger = logger; } public void OnActionExecuted(ActionExecutedContext context) { Log("OnActionExecuted", context.RouteData); } public void OnActionExecuting(ActionExecutingContext context) { Log("OnActionExecuting", context.RouteData); var expire = DateTime.UtcNow.AddDays(1).AddHours(9); var cOptions = new CookieOptions { SameSite = SameSiteMode.Lax, HttpOnly = false, Secure = true, Expires = expire, }; context.HttpContext.Response.Cookies.Append(PERIOD, expire.ToString(), cOptions); } private void Log(string methodName, RouteData routeData) { var controllerName = routeData.Values["controller"]; var actionName = routeData.Values["action"]; var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName); _logger.LogInformation(message); } }
四:アクションフィルターの適用
public void ConfigureServices(IServiceCollection services) { services.AddControllers(options => { options.Filters.Add(typeof(SampleActionFilter)); }) .AddNewtonsoftJson(options => { // モデルバインディング時にJSONでDateTime型を使用すると時間差が発生する // 以下のコードを追加で対応 options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local; });