Add logging
This commit is contained in:
@@ -29,3 +29,4 @@ _ReSharper*/
|
||||
[Tt]est[Rr]esult*
|
||||
packages/**/
|
||||
**/App_Data/*
|
||||
*/Logs/*
|
||||
|
||||
@@ -1,27 +1,26 @@
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using InventoryTraker.Web.Utilities;
|
||||
using NLog;
|
||||
|
||||
namespace InventoryTraker.Web.Attributes
|
||||
{
|
||||
public class ActionLogAttribute : ActionFilterAttribute
|
||||
{
|
||||
public override void OnActionExecuting(ActionExecutingContext filterContext)
|
||||
public override void OnActionExecuting(ActionExecutingContext ctx)
|
||||
{
|
||||
if (filterContext != null)
|
||||
if (ctx != null)
|
||||
{
|
||||
var controller = filterContext.RouteData.Values["controller"].ToString();
|
||||
var action = filterContext.RouteData.Values["action"].ToString();
|
||||
var username = filterContext.HttpContext.User.Identity.Name;
|
||||
var loggerName = $"{controller}Controller.{action}";
|
||||
var @params = string.Join(", ", filterContext.ActionParameters.Select(i => $"{i.Key}: {{{i.Value}}}"));
|
||||
var loggerName = ctx.GetLoggerName();
|
||||
var username = ctx.HttpContext.User.Identity.Name;
|
||||
var @params = string.Join(", ", ctx.ActionParameters.Select(i => $"{i.Key}: {{{i.Value}}}"));
|
||||
|
||||
var hostAddress = filterContext.HttpContext.Request.UserHostAddress;
|
||||
var hostAddress = ctx.HttpContext.Request.UserHostAddress;
|
||||
|
||||
LogManager.GetLogger(loggerName)
|
||||
.Info("UserHostAddress: {0}, username: {1}, params: {{{2}}}", hostAddress, username, @params);
|
||||
}
|
||||
base.OnActionExecuting(filterContext);
|
||||
base.OnActionExecuting(ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.Mvc;
|
||||
using InventoryTraker.Web.Attributes;
|
||||
using InventoryTraker.Web.Identity;
|
||||
using InventoryTraker.Web.Models;
|
||||
using Microsoft.AspNet.Identity;
|
||||
@@ -26,6 +27,7 @@ namespace InventoryTraker.Web.Controllers
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ActionLog]
|
||||
public async Task<ActionResult> Login(LoginForm form)
|
||||
{
|
||||
var user = await _userManager.FindByEmailAsync(form.EmailAddress);
|
||||
@@ -43,6 +45,7 @@ namespace InventoryTraker.Web.Controllers
|
||||
return Json(true);
|
||||
}
|
||||
|
||||
[ActionLog]
|
||||
public ActionResult Logout()
|
||||
{
|
||||
_authManager.SignOut();
|
||||
|
||||
@@ -1,18 +1,31 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using InventoryTraker.Web.ActionResults;
|
||||
using InventoryTraker.Web.Utilities;
|
||||
using NLog;
|
||||
|
||||
namespace InventoryTraker.Web.Controllers
|
||||
{
|
||||
public abstract class ControllerBase : Controller
|
||||
{
|
||||
public BetterJsonResult<T> BetterJson<T>(T model)
|
||||
protected override void OnException(ExceptionContext ctx)
|
||||
{
|
||||
if (ctx?.Exception != null)
|
||||
{
|
||||
var loggerName = ctx.GetLoggerName();
|
||||
|
||||
LogManager.GetLogger(loggerName).Error(ctx.Exception);
|
||||
}
|
||||
|
||||
base.OnException(ctx);
|
||||
}
|
||||
|
||||
protected BetterJsonResult<T> BetterJson<T>(T model)
|
||||
{
|
||||
return new BetterJsonResult<T> {Data = model};
|
||||
}
|
||||
|
||||
protected string[] GetModelStateErrorList()
|
||||
private string[] GetModelStateErrorList()
|
||||
{
|
||||
var errorList =
|
||||
from kvp in ModelState
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using AutoMapper;
|
||||
using AutoMapper.QueryableExtensions;
|
||||
using InventoryTraker.Web.Attributes;
|
||||
using InventoryTraker.Web.Core;
|
||||
using InventoryTraker.Web.Data;
|
||||
using InventoryTraker.Web.Models;
|
||||
@@ -49,6 +50,7 @@ namespace InventoryTraker.Web.Controllers
|
||||
.OrderBy(x => x.InventoryType.Name);
|
||||
}
|
||||
|
||||
[ActionLog]
|
||||
public JsonResult Add(InventoryAddForm form)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
@@ -79,6 +81,7 @@ namespace InventoryTraker.Web.Controllers
|
||||
return BetterJson(model);
|
||||
}
|
||||
|
||||
[ActionLog]
|
||||
public JsonResult Distribute(InventoryDistributeForm form)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
@@ -136,6 +139,7 @@ namespace InventoryTraker.Web.Controllers
|
||||
.ToArray());
|
||||
}
|
||||
|
||||
[ActionLog]
|
||||
public JsonResult Remove(InventoryRemoveForm form)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using AutoMapper.QueryableExtensions;
|
||||
using InventoryTraker.Web.Attributes;
|
||||
using InventoryTraker.Web.Core;
|
||||
using InventoryTraker.Web.Data;
|
||||
using InventoryTraker.Web.Models;
|
||||
@@ -55,6 +54,7 @@ namespace InventoryTraker.Web.Controllers
|
||||
return BetterJson(new { totalItems, transactions });
|
||||
}
|
||||
|
||||
[ActionLog]
|
||||
public JsonResult Delete(int transactionId)
|
||||
{
|
||||
var transaction = _context.Transactions.Find(transactionId);
|
||||
|
||||
@@ -355,6 +355,7 @@
|
||||
<Compile Include="Models\ProfileForm.cs" />
|
||||
<Compile Include="Models\TransactionViewModel.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utilities\ControllerContextExtensions.cs" />
|
||||
<Compile Include="Utilities\ExcelParserBase.cs" />
|
||||
<Compile Include="Utilities\InventoryTypeParser.cs" />
|
||||
<Compile Include="Utilities\DateExtensions.cs" />
|
||||
|
||||
@@ -19,4 +19,8 @@
|
||||
<target name="debugLogger" xsi:type="File" fileName="${basedir}/Logs/Debug.${shortdate}.txt" />
|
||||
<target name="exceptionLogger" xsi:type="File" fileName="${basedir}/Logs/Error.${shortdate}.txt" />
|
||||
</targets>
|
||||
<rules>
|
||||
<logger name="*" minlevel="Debug" writeTo="debugLogger" />
|
||||
<logger name="*" minlevel="Error" writeTo="exceptionLogger" />
|
||||
</rules>
|
||||
</nlog>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace InventoryTraker.Web.Utilities
|
||||
{
|
||||
public static class ControllerContextExtensions
|
||||
{
|
||||
public static string GetLoggerName(this ControllerContext ctx)
|
||||
{
|
||||
var controller = ctx.RouteData.Values["controller"].ToString();
|
||||
var action = ctx.RouteData.Values["action"].ToString();
|
||||
return $"{controller}Controller.{action}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ namespace InventoryTraker.Web.Utilities
|
||||
{
|
||||
private readonly FileSystemInfo _excelFile;
|
||||
|
||||
// ReSharper disable once ClassNeverInstantiated.Local
|
||||
private sealed class InventoryTypeMap : CsvClassMap<InventoryType>
|
||||
{
|
||||
public InventoryTypeMap()
|
||||
|
||||
Reference in New Issue
Block a user