Browse Source

updated AuditingMiddleware for AlwaysLogOnExceptions

pull/2625/head
Galip Tolga Erdem 6 years ago
parent
commit
5c73a61e1c
  1. 27
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs
  2. 7
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs
  3. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs

27
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs

@ -33,6 +33,23 @@ namespace Volo.Abp.AspNetCore.Auditing
await next(context).ConfigureAwait(false);
return;
}
if (Options.AlwaysLogOnException)
{
using (var scope = _auditingManager.BeginScope())
{
try
{
await next(context).ConfigureAwait(false);
return;
}
catch (Exception)
{
await scope.SaveAsync().ConfigureAwait(false);
if (!Options.HideErrors)
throw;
}
}
}
using (var scope = _auditingManager.BeginScope())
{
@ -40,9 +57,8 @@ namespace Volo.Abp.AspNetCore.Auditing
{
await next(context).ConfigureAwait(false);
}
catch (Exception ex)
catch (Exception)
{
scope.AddException(ex);
}
finally
{
@ -53,13 +69,6 @@ namespace Volo.Abp.AspNetCore.Auditing
private bool ShouldWriteAuditLog(HttpContext httpContext)
{
// IF selected, save audit logs on exception on GET requests even if audit log is disabled for GET requests.
if (Options.AlwaysLogOnException &&
string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (!Options.IsEnabled)
{
return false;

7
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs

@ -29,11 +29,11 @@ namespace Volo.Abp.Auditing
/// <summary>
/// Default: true.
/// </summary>
public bool IsEnabledForAnonymousUsers { get; set; } = false;
public bool IsEnabledForAnonymousUsers { get; set; }
/// <summary>
/// Audit log e xceptions.
/// Default: false.
/// Audit log on exceptions.
/// Default: true.
/// </summary>
public bool AlwaysLogOnException { get; set; }
@ -54,6 +54,7 @@ namespace Volo.Abp.Auditing
IsEnabled = true;
IsEnabledForAnonymousUsers = true;
HideErrors = true;
AlwaysLogOnException = true;
Contributors = new List<AuditLogContributor>();

2
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs

@ -39,7 +39,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing
public async Task Should_Trigger_Middleware_And_AuditLog_Exception_Always()
{
_options.IsEnabled = false;
_options.AlwaysLogOnException = true;
_options.AlwaysLogOnException = false;
await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.BadRequest);
//await _auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>()); //Won't work, save happens out of scope
}

Loading…
Cancel
Save