public async ValueTask LogAsync(Auditlog <TUserBrief> auditlog) { auditlog.Operator = await userServices.FindFirstAsync( u => u.Id == auditlog.Operator.Id, u => mapper.Map <TUserBrief>(u)); await collection.InsertOneAsync(auditlog); }
public void SyncFromDmz() { foreach (var auditlogEntry in _dmzAuditlogRepo.AsQueryable()) { // Check if logentry with same id allready exists in masterrepo, which means it was saved earlier, but deletion from dmz failed. if (!_masterAuditlogRepo.AsQueryable().Where(x => x.Id == auditlogEntry.Id).Any()) { Auditlog auditlogToInsert = new Auditlog(); auditlogToInsert.Id = auditlogEntry.Id; auditlogToInsert.Date = auditlogEntry.Date; try { auditlogToInsert.User = Encryptor.DecryptUser(auditlogEntry.User); } catch (Exception) { auditlogToInsert.User = auditlogEntry.User; } auditlogToInsert.Location = auditlogEntry.Location; auditlogToInsert.Controller = auditlogEntry.Controller; auditlogToInsert.Action = auditlogEntry.Action; auditlogToInsert.Parameters = auditlogEntry.Parameters; auditlogToInsert.WrittenToLogFile = false; // Save logentry if it was not found in master repo, and delete from dmz either way. _masterAuditlogRepo.Insert(auditlogToInsert); } _dmzAuditlogRepo.Delete(auditlogEntry); } try { _masterAuditlogRepo.Save(); } catch (Exception e) { _logger.Error($"{ this.GetType().Name},SyncFromDmz(), Error when trying to save auditlogs from dmz to masterdatabase", e); _logger.LogForAdmin("Auditlogs fra DMZ serveren kunne ikke gemmes på den interne server, og ligger derfor stadig på dmz serveren"); return; // Do not delete auditlogs from dmz, if saving in masterrepo failed. } try { _dmzAuditlogRepo.Save(); } catch (Exception e) { _logger.Error($"{ this.GetType().Name},SyncFromDmz(), Error when trying to delete auditlogs from dmz", e); _logger.LogForAdmin("Auditlogs fra DMZ serveren kunne ikke slettes på DMZ serveren efter de er blevet gemt på den interne server"); return; } WriteAuditRecordsToLogfile(); }
public async ValueTask LogAsync(Guid userId, Operation operation, OperatedObjectInfo objectInfo, LogLevel logLevel = LogLevel.Info) { await Task.Yield(); var userBrief = await userServices.FindFirstAsync( u => u.Id == userId, u => mapper.Map <TUserBrief>(u)); var log = new Auditlog <TUserBrief>() { Operator = userBrief, Operation = operation, OperatedObjectInfo = objectInfo, LogLevel = logLevel }; await collection.InsertOneAsync(log); }
public void AuditLog(string user, string userLocation, string controller, string action, string parameters) { Auditlog logEntry = new Auditlog { Date = DateTime.Now.ToString(), User = user ?? "not available", Location = userLocation ?? "not available", Controller = controller ?? "not available", Action = action ?? "not available", Parameters = parameters ?? "not available" }; _auditlogRepo.Insert(logEntry); _uow.Save(); }
public async ValueTask LogErrorAsync(Exception err, HttpContext context) { try { var id = (Guid)(err?.Data?["id"] == null ? Guid.Empty : err?.Data?["id"]); var type = (OperatedType)(err?.Data?["operatedtype"] == null ? OperatedType.UnKnown : err?.Data?["operatedtype"]); var op = Activator.CreateInstance <TUserBrief>(); op.Id = Guid.Parse(context.User.Identity.Name); var dic = new Dictionary <string, object>(); var extradic = err?.Data?["_infos"] as Dictionary <string, object>; if (extradic == null) { extradic = new Dictionary <string, object>(); } foreach (var item in extradic) { dic.Add(item.Key, item.Value); } var reader = new StreamReader(context.Request.Body); dic.Add("inner", err.ToString()); dic.Add("message", err.Message); dic.Add("path", context.Request.Path.Value); dic.Add("query", context.Request.QueryString.Value); dic.Add("method", context.Request.Method); dic.Add("body", await reader.ReadToEndAsync()); reader.Dispose(); var log = new Auditlog <TUserBrief>() { LogLevel = LogLevel.Error, Operator = op, Operation = (Operation)(err?.Data?["operation"] == null ? Operation.UnKnown : err?.Data?["operation"]), OperatedObjectInfo = new OperatedObjectInfo(id, type, dic) }; var t = LogAsync(log); } catch (Exception) { //logger本身报错可能会导致循环报错,暂时不处理 } }
public override void OnActionExecuting(ActionExecutingContext context) { try { var logEntry = new Auditlog(); logEntry.Location = context.HttpContext.Connection.RemoteIpAddress.ToString(); logEntry.Action = ((ControllerActionDescriptor)context.ActionDescriptor).ActionName; logEntry.Controller = ((ControllerActionDescriptor)context.ActionDescriptor).ControllerName; logEntry.Parameters = JsonConvert.SerializeObject(context.ActionArguments, new JsonSerializerSettings() { ContractResolver = new IgnorePropertiesResolver(new[] { "GuId", "Password" }) }); logEntry.Timestamp = DateTime.Now; _auditlogRepo.Insert(logEntry); _auditlogRepo.Save(); } catch (Exception e) { _logger.LogError(e, "OnActionExecuting(), Auditlogging failed."); context.Result = new BadRequestResult(); } base.OnActionExecuting(context); }
public override void OnActionExecuting(ActionExecutingContext context) { try { var logEntry = new Auditlog(); var person = GetLoggedInPerson(context.HttpContext.User); logEntry.UserId = person.Id; logEntry.User = person.FullName; logEntry.Location = context.HttpContext.Connection.RemoteIpAddress.ToString(); logEntry.Action = ((ControllerActionDescriptor)context.ActionDescriptor).ActionName; logEntry.Controller = ((ControllerActionDescriptor)context.ActionDescriptor).ControllerName; logEntry.Parameters = GetODataParameters(context); logEntry.Timestamp = DateTime.Now; _auditlogRepo.Insert(logEntry); _auditlogRepo.Save(); } catch (Exception e) { _logger.LogWarning(e, "OnActionExecuting(), Auditlogging failed."); context.Result = new BadRequestResult(); } base.OnActionExecuting(context); }
public MessageDto <TUserBrief> MapLogToMessage(Auditlog <TUserBrief> log) { var dto = new MessageDto <TUserBrief>(); dto.user = log.Operator; switch (log.Operation) { case Operation.Create: break; case Operation.Update: break; case Operation.Delete: break; case Operation.Access: break; case Operation.Login: break; case Operation.Logout: break; case Operation.Invite: break; case Operation.Kick: break; case Operation.Praise: switch (log.OperatedObjectInfo.type) { case OperatedType.Article: { var article = log.OperatedObjectInfo.Infos["article"] as ArticleLog; dto.message = $"点赞了您的文章<a href=\"/readarticle/{article.ManagedId}\">{article.Title}</a>"; } break; case OperatedType.Project: { var project = log.OperatedObjectInfo.Infos["project"] as ProjectLog; dto.message = $"赞了您的项目<a href=\"/ProjectHome/{project.Id}\">{project.Name}</a>"; } break; case OperatedType.User: { dto.message = "赞了您"; } break; case OperatedType.UnKnown: break; case OperatedType.Comment: { var article = log.OperatedObjectInfo.Infos["article"] as ArticleLog; var comment = log.OperatedObjectInfo.Infos["comment"] as CommentLog; dto.message = $"赞了你在文章{article.Title}的<a href=\"/readarticle/{article.ManagedId}#{comment.Id}\">回复</a>:\n{comment.CommentMessage}"; } break; default: break; } break; case Operation.UnKnown: break; case Operation.Star: switch (log.OperatedObjectInfo.type) { case OperatedType.Article: { var article = log.OperatedObjectInfo.Infos["article"] as ArticleLog; dto.message = $"收藏了您的文章<a href=\"/readarticle/{article.ManagedId}\">{article.Title}</a>"; } break; case OperatedType.Project: { var project = log.OperatedObjectInfo.Infos["project"] as ProjectLog; dto.message = $"收藏了您的项目<a href=\"/ProjectHome/{project.Id}\">{project.Name}</a>"; } break; case OperatedType.UnKnown: break; default: break; } break; case Operation.Follow: { dto.message = "关注了你"; } break; case Operation.Examine: { var article = log.OperatedObjectInfo.Infos["article"] as ArticleLog; dto.message = $"审核通过了您的文章<a href=\"/readarticle/{article.ManagedId}\">{article.Title}</a>"; } break; case Operation.UnExamine: { var article = log.OperatedObjectInfo.Infos["article"] as ArticleLog; dto.message = $"您的文章<a href=\"/readarticle/{article.ManagedId}\">{article.Title}</a>需要修改后再次审核,原因:{log.OperatedObjectInfo.Infos["reason"]}"; } break; case Operation.Comment: { var article = log.OperatedObjectInfo.Infos["article"] as ArticleLog; var comment = log.OperatedObjectInfo.Infos["comment"] as CommentLog; switch (log.OperatedObjectInfo.type) { case OperatedType.Article: dto.message = $"评论了你的文章<a href=\"/readarticle/{article.ManagedId}#{comment.Id}\">{article.Title}</a>:\n{comment.CommentMessage}"; break; case OperatedType.Comment: dto.message = $"回复了你在文章{article.Title}的<a href=\"/readarticle/{article.ManagedId}#{comment.Id}\">评论</a>:\n{comment.CommentMessage}"; break; default: throw new _500Exception("错误的OperatedType"); } } break; default: break; } return(dto); }
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { Stopwatch timer = Stopwatch.StartNew(); // Do something before the action executes. var resultContext = await next(); // next() calls the action method. timer.Stop(); try { Auditlog audit = new Auditlog(); //获取路由信息 var ActionDescriptor = context.ActionDescriptor as Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor; audit.Controller = ActionDescriptor.ControllerName; audit.Action = ActionDescriptor.ActionName; audit.Route = context.HttpContext.Request.Path.ToString(); audit.Parameters = JsonSerializer.Serialize(context.ActionArguments); audit.ClientIpAddress = context.HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault() ?? ""; audit.ClientVirtualIpAddress = context.HttpContext.Connection.RemoteIpAddress.ToString(); //太耗时,暂未解决 //audit.Clientname = Dns.GetHostEntry(audit.Clientipaddress).HostName; audit.BrowserInfo = context.HttpContext.Request.Headers["User-Agent"]; //audit.BrowserInfo = (context.HttpContext.Request.Headers).; audit.MethodType = IsAjax(context.HttpContext.Request) ? context.HttpContext.Request.Method : "Page"; //获取返回结果 if (resultContext.Exception == null) { object data = new object(); if (resultContext.Result is ContentResult) { data = (resultContext.Result as ContentResult).Content; } else if (resultContext.Result is ObjectResult) { data = (resultContext.Result as ObjectResult).Value; } else if (resultContext.Result is JsonResult) { data = (resultContext.Result as JsonResult).Value; } audit.Result = JsonSerializer.Serialize(data); } else { audit.ExceptionMessage = resultContext.Exception.Message; audit.Exception = $"异常类型:{resultContext.Exception.GetType().Name}\r\n异常消息:{resultContext.Exception.Message}\r\n堆栈信息:{resultContext.Exception.StackTrace}\r\n"; } //audit.Userid = context.HttpContext.User.Identity.GetLoginUser(); //audit.UserName = context.HttpContext.User.Identity.GetLoginUserName(); audit.ExecutionDuration = timer.ElapsedMilliseconds; Ser_Auditlog.Insert(audit); } catch (Exception ex) { LogFactory logger = LogFactory.GetLogger(typeof(SampleAsyncActionFilter)); logger.Error(ex, "审计日志记录出错:"); } // resultContext.Result is set. // Do something after the action executes. }