private void Log <TResult>(DbCommand command, DbCommandInterceptionContext <TResult> interceptionContext) { DateTime startTime; TimeSpan duration; _mStartTime.TryRemove(command, out startTime); if (startTime != default(DateTime)) { duration = DateTime.Now - startTime; } else { duration = TimeSpan.Zero; } //int requestId = -1; StringBuilder sb = new StringBuilder(); sb.AppendLine("command used:"); sb.AppendLine(command.CommandText.Replace(Environment.NewLine, "")); StringBuilder parameters = new StringBuilder(); foreach (DbParameter param in command.Parameters) { parameters.AppendLine($"{param.ParameterName} {param.DbType} = {param.Value}"); sb.AppendLine($"set {param.ParameterName} = {param.Value} {param.DbType}"); } _logger.Debug(sb.ToString()); if (duration.TotalSeconds > 1 || interceptionContext.Exception != null) { using (var db = new EfDbContext()) { var model = new SQLProfiler() { Query = command.CommandText, Parameters = parameters.ToString(), CommandType = Convert.ToString(command.CommandType), TotalSeconds = (decimal)duration.TotalSeconds, Exception = Convert.ToString(interceptionContext.Exception), InnerException = interceptionContext.Exception == null ? "" : Convert.ToString(interceptionContext.Exception.InnerException), RequestId = 0, FileName = "", CreateDate = DateTime.Now, Active = true }; if (db.SQLProfilers.Any(x => x.Query == model.Query && x.Parameters == model.Parameters)) { return; } db.SQLProfilers.Add(model); db.SaveChanges(); } } }
private void Executed <TResult>(DbCommand command, DbCommandInterceptionContext <TResult> interceptionContext) { var timer = interceptionContext.FindUserState("timer") as Stopwatch; timer?.Stop(); StringBuilder sb = new StringBuilder(); sb.AppendLine("command used:"); sb.AppendLine(command.CommandText.Replace(Environment.NewLine, "")); StringBuilder parameters = new StringBuilder(); foreach (DbParameter param in command.Parameters) { parameters.AppendLine($"{param.ParameterName} {param.DbType} = {param.Value}"); sb.AppendLine($"set {param.ParameterName} = {param.Value} {param.DbType}"); } _logger.Debug(sb.ToString()); if (timer?.ElapsedMilliseconds > 1000 || interceptionContext.Exception != null) { using (var db = new EfDbContext()) { var model = new SQLProfiler() { Query = command.CommandText, Parameters = parameters.ToString(), CommandType = Convert.ToString(command.CommandType), TotalSeconds = (decimal)timer?.ElapsedMilliseconds, Exception = Convert.ToString(interceptionContext.Exception), InnerException = interceptionContext.Exception == null ? "" : Convert.ToString(interceptionContext.Exception.InnerException), RequestId = 0, FileName = "", CreateDate = DateTime.Now, Active = true }; if (db.SQLProfilers.Any(x => x.Query == model.Query && x.Parameters == model.Parameters)) { return; } db.SQLProfilers.Add(model); db.SaveChanges(); } } }