.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项目中,记录用户操作日志,总是在方法里,加一行代码,记录此时用户操作类型与相关信息.该记录日志的方法对原来的业务操作侵入性较强,也比较零散,不便于查看和管理.那么有没有更加通用点的 ...
随机推荐
- Day24-KindEditor基本使用和文件操作2
KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器. 1. 准备 2. 写 ...
- 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集
题目描述 给定实直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取出开区间集合 \(S \subseteq ...
- 【转】I2C总线协议
I2C总线(Inter Integrated-Circuit)是由PHILIPS公司在上世纪80年代发明的一种电路板级串行总线标准,通过两根信号线——时钟线SCL和数据线SDA——即可完成主从机的单工 ...
- 【转】Keil ARM开发 error L6236E错误解决
顺利创建了第一个Keil工程却发现不能完成链接,出现了一个下面这样的报错: .\Objects\demo_simple.sct(7): error: L6236E: No section matche ...
- hdu5449 Robot Dog (树形dp+倍增lca)
(警告:本篇博客包含大量人类本质内容) 先处理出来lca,然后就只需要知道从每个点到他的父亲.和从他的父亲到这个点的期望时间就可以了 我们设f[x]为x到他父亲的期望时间:g[x]为从x的父亲到x的期 ...
- (转)Maven学习总结(六)——Maven与Eclipse整合
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(六)——Maven与Eclipse整合 一.安装Maven插件 下载下来的maven插件如下图所示:,插件存放的路径是:E:/MavenP ...
- c++桥接模式
可以简记为pointer to implement:”指向实现的指针”. [DP]书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.考虑装操作系统,有多种配置的计算机,同样也有多款操作系 ...
- tp3 链接生成二维码
https://packagist.org/packages/endroid/qr-code
- 函数和常用模块【day06】:模块特殊变量(十四)
from test import test ''' __mame__ # 当前文件为主文件是等于__main__.用于调用时不执行一些命令 __file__ # 当前文件的路径,相对路径 __cach ...
- IIS发布MVC出错
一个MVC网站在发布到IIS上时,出现了这个问题: 然后解决办法: 然后应用程序池那里,自己点右键添加一个 新建完应用池之后选中点高级设置 最后,添加网站,添加网站的时候应用程序池选择自己刚刚新建的那 ...