, 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.
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
Olası kopyası [ELMAH on ASP.NET vNext?] (Http://stackoverflow.com/questions/28907017/elmah-on-asp-net-vnext) – blowdart