示例#1
0
    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);
        }
    }
示例#2
0
    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();
            }
        }
    }
示例#3
0
    public EntityHistoryHelper(
        IAuditingStore auditingStore,
        IOptions <AuditingOptions> options,
        IClock clock,
        IAuditingFactory auditingHelper)
    {
        Clock          = clock;
        AuditingStore  = auditingStore;
        AuditingHelper = auditingHelper;
        Options        = options.Value;

        Logger = NullLogger <EntityHistoryHelper> .Instance;
    }
示例#4
0
    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;
    }
示例#5
0
    /// <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);
    }