1、NLogをインストールする
Install-Package NLog.Config
Install-Package NLog.Config
Install-Package NLog.Config
2、NLog.configを編集する(NLog.configをインストールすると生成される)
3、ログの書き出し(コントローラーの開始と終了)
一:NLogの読み込みとエラー時のログ書き込みの実装
public static void Main(string[] args)
var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
CreateWebHostBuilder(args).Build().Run();
logger.Error(ex, "Stopped program because of exception");
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();
}
}
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)
.ConfigureLogging((hostingContext, logging) => {
// NLog 以外で設定された Provider の無効化.
logging.ClearProviders();
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging((hostingContext, logging) => {
// NLog 以外で設定された Provider の無効化.
logging.ClearProviders();
})
.UseNLog();
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)
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,
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 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 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;
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.Filters.Add(typeof(SampleActionFilter));
})
.AddNewtonsoftJson(options =>
{
// モデルバインディング時にJSONでDateTime型を使用すると時間差が発生する
// 以下のコードを追加で対応
options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
});
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.Filters.Add(typeof(SampleActionFilter));
})
.AddNewtonsoftJson(options =>
{
// モデルバインディング時にJSONでDateTime型を使用すると時間差が発生する
// 以下のコードを追加で対応
options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
});