前段时间,实现了 EventBus 以及 EventQueue 基于 Event 的事件处理,但是没有做日志(EventLog)相关的部分,原本想增加两个接口, 处理事件发布日志和事件处理日志,最近用了 AOP 的思想处理了 EntityFramework 的数据变更自动审计,于是想着事件日志也用 AOP 的思想来实现,而且可能用 AOP 来处理可能会更好一些,最近自己造了一个 AOP 的轮子 —— FluentAspects,下面的示例就以它来演示了,你也可以换成自己喜欢的 AOP 组件,思想是类似的
事件日志示例#

事件发布日志#
事件发布日志只需要拦截事件发布的方法调用即可,在发布事件时进行拦截,在拦截器中根据需要进行日志记录即可
事件发布者接口定义:
public interface IEventPublisher{ /// /// publish an event
/// /// event type /// event data /// whether the operation succeed bool Publish(TEvent @event) where TEvent : class, IEventBase; /// /// publish an event async
/// /// event type /// event data /// whether the operation succeed Task PublishAsync(TEvent @event) where TEvent : class, IEventBase;
}
事件发布日志拦截器:
public class EventPublishLogInterceptor : AbstractInterceptor{ public override async Task Invoke(IInvocation invocation, Func next) {
Console.WriteLine("-------------------------------");
Console.WriteLine($"Event publish begin, eventData:{invocation.Arguments.ToJson()}"); var watch = Stopwatch.StartNew(); try
{ await next();
} catch (Exception ex)
{
Console.WriteLine($"Event publish exception({ex

本文介绍如何利用AOP(面向切面编程)处理事件发布和处理的日志记录,通过拦截事件发布和处理的方法,实现日志自动化。示例中使用FluentAspects库,但强调可以替换为其他AOP组件。文章提供了事件发布日志和事件处理日志的拦截器定义,并展示了AOP配置以及事件发布的中间件示例。
最低0.47元/天 解锁文章
3812

被折叠的 条评论
为什么被折叠?



