private static async Task ProceedByLoggingAsync( IMethodInvocation invocation, IAuditingFactory auditingHelper, IAuditLogScope auditLogScope) { var auditLog = auditLogScope.Log; var auditLogAction = auditingHelper.CreateAuditLogAction( auditLog, invocation.TargetObject.GetType(), invocation.Method, invocation.Arguments ); var stopwatch = Stopwatch.StartNew(); try { await invocation.ProceedAsync(); } catch (Exception ex) { auditLog.Exceptions.Add(ex); throw; } finally { stopwatch.Stop(); auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds); auditLog.Actions.Add(auditLogAction); } }
private async Task ProcessWithNewAuditingScopeAsync( IMethodInvocation invocation, AuditingOptions options, ICurrentUser currentUser, IAuditingManager auditingManager, IAuditingFactory auditingHelper) { var hasError = false; using var saveHandle = auditingManager.BeginScope(); try { await ProceedByLoggingAsync(invocation, auditingHelper, auditingManager.Current); Debug.Assert(auditingManager.Current != null); if (auditingManager.Current.Log.Exceptions.Any()) { hasError = true; } } catch (Exception) { hasError = true; throw; } finally { if (ShouldWriteAuditLog(invocation, options, currentUser, hasError)) { await saveHandle.SaveAsync(); } } }
public EntityHistoryHelper( IAuditingStore auditingStore, IOptions <AuditingOptions> options, IClock clock, IAuditingFactory auditingHelper) { Clock = clock; AuditingStore = auditingStore; AuditingHelper = auditingHelper; Options = options.Value; Logger = NullLogger <EntityHistoryHelper> .Instance; }
public AuditingManager( IAmbientScopeProvider <IAuditLogScope> ambientScopeProvider, IAuditingFactory auditingFactory, IAuditingStore auditingStore, IServiceProvider serviceProvider, IOptions <AuditingOptions> options) { ServiceProvider = serviceProvider; Options = options.Value; Logger = NullLogger <AuditingManager> .Instance; _ambientScopeProvider = ambientScopeProvider; _auditingFactory = auditingFactory; _auditingStore = auditingStore; }
/// <summary> /// 是否拦截 /// </summary> /// <param name="invocation"></param> /// <param name="options"></param> /// <param name="auditingHelper"></param> /// <returns></returns> protected virtual bool ShouldIntercept(IMethodInvocation invocation, AuditingOptions options, IAuditingFactory auditingHelper) { if (!options.IsEnabled) { return(false); } //if (AbpCrossCuttingConcerns.IsApplied(invocation.TargetObject, AbpCrossCuttingConcerns.Auditing)) //{ // return false; //} if (!auditingHelper.ShouldSaveAudit(invocation.Method)) { return(false); } return(true); }