.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("{: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中的日志
.NetCore中使用ExceptionLess 添加操作日志的更多相关文章
- aop为系统添加操作日志,注入或配置声明的方式来实现
最近做项目实现操作记录添加日志,由于aop这两种实现方式各有优缺点,所以都实现了一下以后根据具体业务选择. 1实现方式一注入: 1.1首先在xml中开启aop注入,需要引入的包此处省略,可百度自己查找 ...
- .NetCore 中扩展ExceptionLess 实现链式方法添加操作日志
在使用ExceptionLess添加日志的时候,发现还是有一些写法上的个人觉得不爽的地方,比如添加Info日志 ExceptionlessClient.Default.CreateLog(source ...
- ORACLE数据导入导出后新数据库中某些表添加操作报错[ORA-12899]
由于项目需要,我在搭建了新的开发环境后,需要将之前环境中的ORACLE数据库导出,再导入到新的开发环境下.当导出导入完成后,使用数据库进行添加操作时 发现针对很多表的添加操作报错,具体报错原因描述为: ...
- .NetCore中使用ExceptionLess记录Polly中的操作异常日志
结合上一篇文章我写了一个demo测试下 重试2次 _polly.PollyRetry<Exception>(()=>_demoQuery.GetTestAOPAsync(), ); ...
- 为table元素添加操作日志
1.为所有的元素添加函数onchange() <input id="status" value="${status}" onchange="ch ...
- .NetCore中结合ExceptionLess的处理对Polly再次封装
/// <summary> /// Polly封装 liyouming /// </summary> public class PollyServicesFactory { p ...
- SSH基于Hibernate eventListener 事件侦听器的操作日志自动保存到数据库
在spring xml配置文件中添加配置,包含:model.listener 在model中增加需要写入数据库对应表的model 在auditLog.xml配置文件中配置自己项目中,需要进行日志记录的 ...
- Tomcat会话超时时怎样记录操作日志,满足安全审计要求
众所周知.在实际的Web应用程序中,会话管理一般都採用Web容器会话管理功能. 使用Tomcat做Webserver也是如此,并且从安全的角度考虑,尽量避免去更改和干预Web容器的会话管理功能. To ...
- 由做网站操作日志想到的HttpModule应用
背景 在以前的Web项目中,记录用户操作日志,总是在方法里,加一行代码,记录此时用户操作类型与相关信息.该记录日志的方法对原来的业务操作侵入性较强,也比较零散,不便于查看和管理.那么有没有更加通用点的 ...
随机推荐
- fzu 2082 过路费 (树链剖分+线段树 边权)
Problem 2082 过路费 Accept: 887 Submit: 2881Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- 前端学习 -- Css -- 字体
设置字体颜色,使用color来设置文字的颜色 设置文字的大小,浏览器中一般默认的文字大小都是16pxfont-size设置的并不是文字本身的大小,在页面中,每个文字都是处在一个看不见的框中的我们设置的 ...
- java旋转图片
/** * 旋转角度 * @param src 源图片 * @param angel 角度 * @return 目标图片 */ public static BufferedImage rotate(I ...
- 五、spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate
1.pom添加依赖 <!-- spring data jpa,会注入tomcat jdbc pool/hibernate等 --> <dependency> <group ...
- PHP用户输入安全过滤和注入攻击检测
摘抄自ThinkPHP /** * 获取变量 支持过滤和默认值 * @param array $data 数据源 * @param string|false $name 字段名 * @param mi ...
- 遭遇:“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误
http://www.cnblogs.com/delphinet/archive/2010/03/09/1681777.html 正在写一个类似文章的发表系统.其中记录文章内容的字段Contents设 ...
- 螺旋队列和hiho1525逃离迷宫3
我是真调不出错误了! hiho1525逃离迷宫3 #include <stdio.h> #include <stdlib.h> #include <math.h> ...
- string::replace
#include <string> #include <cctype> #include <algorithm> #include <iostream> ...
- HTML5 快速学习一
关注HTML5有一段时间了,一直没系统的去学习过. 对于HTML5的理解,之前停留在一些新的标签,一些api可以完成部分js完成的事情,仅此而已. 前段时间HTML5定稿了,看了一些这方面的报道,进行 ...
- AngularJS 项目里使用echarts 2.0 实现地图功能
项目中有一页是显示全国地图, echarts官网的地图实例里,有一个模拟迁徙的实例,比较符合项目需求.所以大部分配置项是参考此实例. angular 就不过多介绍了, Google出品的mvc(或者说 ...