.NetCore中使用ExceptionLess 添加操作日志


上一篇文章已經擴展了日志,下面我們在結合下處理操作日志

通常我們想到操作日志 可能想到的參數可能有 模塊 方法 參數內容 操作人 操作時間 操作 Ip 下面我們就來結合這些信息添加操作日志

如果要在代碼中每個操作中添加 是非常繁瑣的 代碼很大部分重復,有AOP思想的應該都知道面向切面的方式處理日志,日志貫穿整個系統

所以我們會想到過濾器,在之前的文章中我用到了攔截器處理,這里我們使用 Filter 過濾器 結合Attribute屬性來處理,這里我們主要依靠 IAsyncActionFilter 或者 IActionFilter 來處理

定義個屬性類 LogAttribute

 public class LogAttribute : Attribute, IAsyncActionFilter
    {
   }

實現 IAsyncActionFilter 接口 ,定義好屬性需要的構造函數 具體代碼如下 結合 ExceptionLess添加操作日志

 public class LogAttribute : Attribute, IAsyncActionFilter
    {
        private string MoudleName { get; set; }
        private string MethodName { get; set; }
        /// <summary>
        /// 構造日志類型
        /// </summary>
        /// <param name="Moudle">模塊名稱</param>
        /// <param name="Method">方法名稱</param>
        public LogAttribute(string Moudle, string Method)
        {
            this.MoudleName = Moudle;
            this.MethodName = Method;
        }
        /// <summary>
        /// 添加操作日志 liyouming
        /// </summary>
        /// <param name="context"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            var actiondescriptor = ((ControllerActionDescriptor)context.ActionDescriptor);
            var identity = ((ApiBase)context.Controller).userIdentity;
            var _eLLog = context.HttpContext.RequestServices.GetService(typeof(IELLog)) as IELLog;
            var model = JsonConvert.SerializeObject(context.ActionArguments);
            _eLLog.AddSource($"[{MoudleName}]{MethodName}{string.Format("{0:yyyy年MM月dd日 HH:mm:ss}", DateTime.Now)}")
                .AddMessage("參數內容:" + model ?? "")
                .AddTag(identity.UserId ?? "")
                .AddTag(identity.UserName ?? "")
                .AddTag(actiondescriptor.ControllerName)
                .AddTag(actiondescriptor.ActionName)
                .AddTag(MoudleName)
                .AddTag(MethodName)
                .AddTag(string.Format("{0:yyyy-MM-dd}", DateTime.Now))
                .AddSubmitInfo();

            await next.Invoke();
        }
    }

接下來添加好接口代碼

/// <summary>
        /// Demo 添加數據 調用MediatR DDD 實現領域事件
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Route("createdata")]
        [ProducesResponseType(typeof(OperatorResult),(int) HttpStatusCode.OK)]
        [Permission(PermissionCode.DemoCreate)]
        [Log("測試模塊","添加測試方法")]
        public async Task<IActionResult> CreateData([FromBody]SchoolDto model)
        {
            var validationResult = _validator.Validate(model);
            if (!validationResult.IsValid)
            {
                return Ok(new OperatorResult
                {
                    Result = ResultType.Fail,
                    Message = string.Join(";", validationResult.Errors)
                });
            }
            //這里用Mapper做映射 
            var school = _mapper.Map<SchoolDto, School>(model);
            school.Id = Guid.NewGuid();
            school.AddClassesDomain(new Classes { CName="Demo", Id=Guid.NewGuid() }); var command = new DemoCreateCommand { com_school = school };
            var result = await _mediator.Send(command);
            
            return Ok(result);
        }

 

下面我們通過API來測試下

下面看下ExceptionLess中的日志

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM