前段时间,实现了 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