Как использовать Elmah в ASP.NET 5 / vNext / Core?

Я немного смущен тем, как использовать Elmah в ASP.NET 5 / проекты MVC 6. Я получил пакет от nuget, и он добавил "Elmah.Mvc": "2.1.2" зависимостей в проекте.формат JSON.

Я не уверен, куда идти отсюда - в тот же день nuget добавит записи в интернет.config, который теперь ушел. И я не могу найти никаких примеров на их github или где-либо еще.

Я пропустил что-то простое?

2 ответов


вместо использования ELMAH нетрудно реализовать ведение журнала ошибок вручную. Этот процесс будет ловить любое исключение, которое происходит в проекте, и регистрировать его в таблице базы данных. Для этого добавьте в метод Configure при запуске следующее.cs

  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
    app.UseBrowserLink();
  }
  else
  {
    app.UseExceptionHandler(builder =>
      {
        builder.Run(async context =>
        {
          context.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
          context.Response.ContentType = "text/html";

          var error = context.Features.Get<Microsoft.AspNetCore.Diagnostics.IExceptionHandlerFeature>();
          if (error != null)
          {
            LogException(error.Error, context);
            await context.Response.WriteAsync("<h2>An error has occured in the website.</h2>").ConfigureAwait(false);
          }
        });
      });
  }

включите это в Startup.cs также:

private void LogException(Exception error, HttpContext context)
{
  try
  {
    var connectionStr = Configuration["ConnectionString"];
    using (var connection = new System.Data.SqlClient.SqlConnection(connectionStr))
    {
      var command = connection.CreateCommand();
      command.CommandText = @"INSERT INTO ErrorLog (Application, Host, Type, Source, Path, Method, Message, StackTrace, [User],  WhenOccured)
    VALUES (@Application, @Host, @Type, @Source, @Path, @Method, @Message, @StackTrace, @User,  @WhenOccured)";
      connection.Open();

      if (error.InnerException != null)
        error = error.InnerException;

      command.Parameters.AddWithValue("@Application", this.GetType().Namespace);
      command.Parameters.AddWithValue("@Host", Environment.MachineName);
      command.Parameters.AddWithValue("@Type", error.GetType().FullName);
      command.Parameters.AddWithValue("@Source", error.Source);
      command.Parameters.AddWithValue("@Path", context.Request.Path.Value);
      command.Parameters.AddWithValue("@Method", context.Request.Method);
      command.Parameters.AddWithValue("@Message", error.Message);
      command.Parameters.AddWithValue("@StackTrace", error.StackTrace);
      var user = context.User.Identity?.Name;
      if (user == null)
        command.Parameters.AddWithValue("@User", DBNull.Value);
      else
        command.Parameters.AddWithValue("@User", user);
      command.Parameters.AddWithValue("@WhenOccured", DateTime.Now);

      command.ExecuteNonQuery();
    }
  }
  catch { }
}

обратите внимание, что вам нужно будет создать таблицу в базе данных со структурой, используемой в этой функции.


ELMAH не был обновлен для поддержки ASP.NET ядро еще. Атиф Азис немного поработал над созданием паутины.config бесплатный модуль конфигурации называется загрузчика,. Bootstrapper не поддерживает ASP.NET ядро (насколько мне известно). Но я уверен, что работа по поддержке новой версии начнется, как только мы приблизимся к RTM.