using APT.Infrastructure.Core; using log4net; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web.Mvc; namespace APT.API { public class LogAttribute : Attribute, IAsyncActionFilter { /// /// 添加操作日志 liyouming /// /// /// /// public async Task OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, ActionExecutionDelegate next) { string actionArguments = context.ActionArguments.ToJson(); var resultContext = await next(); string url = resultContext.HttpContext.Request.Host + resultContext.HttpContext.Request.Path + resultContext.HttpContext.Request.QueryString; string method = resultContext.HttpContext.Request.Method; dynamic result = resultContext.Result.GetType().Name == "EmptyResult" ? new { Value = "EmptyResult" } : resultContext.Result as dynamic; var userHeads = resultContext.HttpContext.Request.Headers; var userid = string.Empty; var username = string.Empty; if (userHeads.ContainsKey("userid")) { userid = userHeads["userid"].ToString(); } if (userHeads.ContainsKey("username")) { username = userHeads["username"].ToString(); } string response = JsonConvert.SerializeObject(result.Value); var str = $"用户ID:[{userid}],姓名:[{username}],api地址:[{url}],方法:[{method}],接口参数:[{actionArguments}],应答:[{response}]"; LoggerManager.GetLogger("SQLLog").Info(str); await next.Invoke(); } } }