❤️ 关注 Furion 微信公众号有惊喜哦!
🫠 遇到问题了
Skip to main content
⭐️ 开通 VIP 服务仅需 499 元/年,尊享 365 天项目无忧23 立即开通23 ⭐️
特别赞助

5.4 请求审计日志

小知识

Furion 提供了非常强大的 LoggingMonitor 审计日志功能,可直接使用:LoggingMonitor 文档

5.4.1 审计日志

在一个企业应用系统中,用户对系统所有的操作包括请求、数据库操作等等都应该记录起来,那么这些日志我们称为操作日志,也可以说审计日志。

关于数据库操作审计日志

如需实现 sql 操作,数据库操作 的审计日志可查阅 【9.23 审计日志章节

5.4.2 请求审计日志

实现原理

在这里,结合 【5.3 筛选器】 实现请求审计日志功能。

请求审计日志通常指的是记录请求地址,来源地址,操作人,传递参数等。这个主要是通过 IAsyncActionFilter 筛选器实现,如:

  1. 定义 RequestAuditFilter 并实现 IAsyncActionFilter
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Security.Claims;
using System.Threading.Tasks;

namespace Furion.Web.Core
{
public class RequestAuditFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
//============== 这里是执行方法之前获取数据 ====================

// 获取控制器、路由信息
var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 获取请求的方法
var method = actionDescriptor.MethodInfo;

// 获取 HttpContext 和 HttpRequest 对象
var httpContext = context.HttpContext;
var httpRequest = httpContext.Request;

// 获取客户端 Ipv4 地址
var remoteIPv4 = httpContext.GetRemoteIpAddressToIPv4();

// 获取请求的 Url 地址
var requestUrl = httpRequest.GetRequestUrlAddress();

// 获取来源 Url 地址
var refererUrl = httpRequest.GetRefererUrlAddress();

// 获取请求参数(写入日志,需序列化成字符串后存储)
var parameters = context.ActionArguments;

// 获取操作人(必须授权访问才有值)"userId" 为你存储的 claims type,jwt 授权对应的是 payload 中存储的键名
var userId = httpContext.User?.FindFirstValue("userId");

// 请求时间
var requestedTime = DateTimeOffset.Now;


//============== 这里是执行方法之后获取数据 ====================
var actionContext = await next();

// 获取返回的结果
var returnResult = actionContext.Result;

// 判断是否请求成功,没有异常就是请求成功
var isRequestSucceed = actionContext.Exception == null;

// 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈
var stackTrace = EnhancedStackTrace.Current();

// 这里写入日志,或存储到数据库中!!!~~~~~~~~~~~~~~~~~~~~
}
}
}
  1. 注册 RequestAuditFilter 筛选器
services.AddMvcFilter<RequestAuditFilter>();

5.4.3 LoggingMonitor 审计日志

小知识

Furion 提供了非常强大的 LoggingMonitor 审计日志功能,可直接使用:LoggingMonitor 文档

┏━━━━━━━━━━━  Logging Monitor ━━━━━━━━━━━
┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application)

┣ 控制器名称: TestLoggerServices
┣ 操作名称: GetPerson
┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person
┣ 请求方式: POST
┣ 请求地址: https://localhost:44316/api/test-logger/person/11
┣ 来源地址: https://localhost:44316/api/index.html
┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62
┣ 客户端 IP 地址: 0.0.0.1
┣ 服务端 IP 地址: 0.0.0.1
┣ 服务端运行环境: Development
┣ 执行耗时: 31ms
┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━
┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg

┣ UserId (integer): 1
┣ Account (string): admin
┣ iat (integer): 1658716797
┣ nbf (integer): 1658716797
┣ exp (integer): 1658717997
┣ iss (string): dotnetchina
┣ aud (string): powerby Furion
┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━
┣ Content-Type:

┣ id (Int32): 11
┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━
┣ 类型: Furion.Application.Persons.PersonDto
┣ 返回值: {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}
┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━

5.4.4 反馈与建议

与我们交流

给 Furion 提 Issue