public async Task Test_AuditLogger_WriteLog() { // Arrange - Ensure the audit table exists before starting. var tableExists = _tableStorage.CheckTableExists(_tableStorage.AuditTableName).GetAwaiter().GetResult(); Assert.True(tableExists); Thread.Sleep(2000); // Act - write audit logs. _auditLogger.WriteLog("eventName1", "message1").GetAwaiter().GetResult(); _auditLogger.WriteLog("eventName2", "message2", "source1", 1).GetAwaiter().GetResult(); _auditLogger.WriteLog("eventName3", "message3", "source2", 0, 2).GetAwaiter().GetResult(); _auditLogger.WriteLog("eventName4", "message4", "useridentifier1").GetAwaiter().GetResult(); _auditLogger.WriteLog("eventName5", "message5", "userIdentifier2", "source3", 3).GetAwaiter().GetResult(); _auditLogger.WriteLog("eventName6", "message6", "useridentifier3", 5).GetAwaiter().GetResult(); _auditLogger.WriteLog("eventName6", "message7", "useridentifier4", 5, 10).GetAwaiter().GetResult(); Thread.Sleep(1000); var count = await _tableStorage.CountItemsQuery(_tableStorage.AuditTableName, $"Timestamp ge datetime'{DateTime.Now.AddDays(-1):yyyy-MM-ddThh:mm:ss}'"); var countEvent1 = await _tableStorage.CountItems(_tableStorage.AuditTableName, "eventName1"); // Assert Assert.True(count >= 0); Assert.True(countEvent1 > 0); }
/// <summary> /// Auditing to permanent storage is done using some common controller action info. /// </summary> /// <param name="context">Action execution context.</param> public void OnActionExecuting(ActionExecutingContext context) { //Audit info var eventType = context.ActionDescriptor.AttributeRouteInfo.Name.SetDefaultIfNullOrEmpty("No Route Name Supplied"); var eventTargetId = context.ActionArguments.FirstOrDefault(x => x.Key.Equals("id", StringComparison.OrdinalIgnoreCase)).Value ?? "No id Parameter Supplied"; var eventSource = context.ActionDescriptor.DisplayName; // This is the full assembly name including controller and action string userId = context.HttpContext.GetUserId(); string referer = context.HttpContext.GetRequestReferer(); // default if the user is not set. if (userId.IsNullOrDefault()) { userId = AppDomain.CurrentDomain.FriendlyName.ToUpperInvariant(); } var auditInfo = new Dictionary <string, string> { { "EventType", eventType }, { "EventTargetId", eventTargetId.ToString() } }; // Append referer url to the audit info if we have any. if (!referer.IsNullOrEmpty()) { auditInfo.Add("Referer", referer); } // Create the Audit log. _auditLogger.WriteLog(_eventName, _eventMessage, userId, eventSource, auditInfo); }