2016-01-29 31 views
6

Elmah'yi ASP.NET 5/MVC 6 projelerinde nasıl kullanacağım konusunda biraz kafam karıştı. Paketi nuget'ten aldım ve project.json'daki bağımlılıklara "Elmah.Mvc": "2.1.2" ekledi.ASP.NET 5/vNext/Core'da Elmah nasıl kullanılır?

Buradan nereye gitmek emin değilim - Gün içinde tekrar, Nuget artık gitti web.config giriş eklemek istiyorum. Ve onların github veya başka yerlerde herhangi bir örnek göremiyorum.

Basit bir şey mi eksik?

+0

Tüm paketler ASP.NET Çekirdek ile uyumlu olacak şekilde güncellendi. Elmah ile ASP.NET yığını arasında ihtiyaç duyulan entegrasyon seviyesi göz önüne alındığında, Elmah'ın henüz güncellenmediğini söyleyebilirim. – mason

+0

Olası kopyası [ELMAH on ASP.NET vNext?] (Http://stackoverflow.com/questions/28907017/elmah-on-asp-net-vnext) – blowdart

cevap

10

, elle hata günlüğü uygulamak zor değil. Bu işlem, projede meydana gelen herhangi bir özel durumu yakalar ve bir veritabanı tablosuna kaydeder. Bunu yapmak için, Startup.cs yapılandır yöntemine aşağıdakileri ekleyin

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); 
      } 
     }); 
     }); 
    } 

yanı Startup.cs bu dahil edilsin: olacaktır

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 { } 
} 

Not veritabanınızda bir tablo oluşturmak için Bu fonksiyonda kullanılan yapı ile.

+0

Hmm, yeni bir istisna atarken yangın çıkmıyor ... Bunun nasıl çalıştığını anlayamıyorum mu? –

+0

Sadece tahmin etmek, ama bunu geliştirme modunda deniyorsunuz çünkü? Bu durumda, LogException çağırmak yerine web sayfasında hata ayrıntılarını gösterecektir. Bu, ilk kod bloğundaki if ifadesi ile değiştirilebilir. – Rono

2

ELMAH henüz ASP.NET Core'u desteklemek için güncellendi değildir. Atif Azis, Bootstrapper adında bir web.config içermeyen yapılandırma modülü oluşturmaya çalıştı. Bootstrapper, ASP.NET Core'u (bilgimden itibaren) desteklemiyor. Ama eminim ki yeni versiyonu destekleyen çalışma, RTM'ye yaklaştıkça başlayacaktır. Bunun yerine ELMAH kullanmanın

+0

Bana sorarsanız, bu bir modülün adından geçmeye zorlanır Önyükleyici JS ve CSS kütüphanesinin nasıl bilindiği göz önüne alındığında Bootstrapper. – ProfK

İlgili konular