using APT.Infrastructure.Core; using log4net; using Microsoft.AspNetCore.Mvc.Filters; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace APT.Infrastructure.Core { public class LogAttribute : Attribute, IAsyncActionFilter { /// /// 添加操作日志 liyouming /// /// /// /// public async Task OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, ActionExecutionDelegate next) { try { 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}]"; //var points = new Point //{ // Name = "ApiLog", // Timestamp = DateTime.Now, // Tags = new Dictionary() //{ // { "Id", Guid.NewGuid()} //}, // Fields = new Dictionary() //{ // { "UserId", userid }, // { "UserName", username }, // { "ApiUrl", url }, // { "Method", method }, // { "ActionArguments", actionArguments }, // { "Response", response } //}, //}; LoggerManager.GetLogger().Info("时序数据库开始写入数据"); //var ret = await InfluxDbHelper.InfluxDbClient.Client.WriteAsync(points, InfluxDbHelper.InfluxLogDbName); //LoggerManager.GetLogger().Info("时序数据库插入结果:" + ret.Success); } catch (Exception ex) { LoggerManager.GetLogger().Error(Infrastructure.Core.LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message); //throw; } finally { await next.Invoke(); } } } }