Làm việc nó ra, bằng cách sử dụng hai lựa chọn:
1) ILoggerProvider Thực hiện ILoggerProvider và ILogger của riêng bạn từ Microsoft.Framework.Logging namespace Sau đó gắn nó vào khung MVC trong Startup.cs thêm đoạn mã sau:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
{
loggerfactory.AddProvider(new YourCustomProvider());
}
Nhưng tùy chọn ở trên này, dường như chỉ gọi Viết chức năng của ILogger trên MVC sự kiện cụ thể, liên quan đến định tuyến và như vậy, nó không được gọi khi tôi ném ngoại lệ trên lớp thấp hơn tôi, vì vậy thứ hai tùy chọn đã được thực hiện:
2) Lọc toàn cầu đăng ký thực hiện ActionFilterAttribute của riêng bạn trong Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().Configure<MvcOptions>(options =>
{
options.Filters.Add(new YourCustomFilter());
});
}
Điều quan trọng là, rằng lớp lọc tùy chỉnh thực hiện các interace IExceptionFilter:
public class YourCustomFilter : ActionFilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext context)
{
///logic...
}
}
(EDIT :) Và sau đó trong lớp Khởi động, chúng tôi thêm bộ lọc:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(new YourCustomFilter());
});
}
Nguồn
2015-02-14 01:56:41
Bạn đang tìm cách bắt các ngoại lệ hoàn toàn tùy ý? Hoặc các trường hợp ngoại lệ kết thúc gây ra yêu cầu không thành công? Nếu nó cố gắng để bắt * tất cả * ngoại lệ, đó là không thực tế có thể bởi vì hầu hết các trường hợp ngoại lệ được bắt và xử lý bởi các bộ phận của hệ thống (và sau đó ăn cho một logger). Nếu bạn thấy rằng một số ngoại lệ không được ghi lại, vui lòng đăng nhập một lỗi trong repo thích hợp trên https://github.com/aspnet/ (ví dụ: MVC hoặc XRE). – Eilon
Vâng, đó là lý do tại sao nó không hoạt động, bởi vì tôi bắt chúng ở các tầng thấp hơn, nhưng khi tôi tạm thời nhận xét đánh bắt, chỉ có cách tiếp cận bộ lọc mới cho phép tôi bắt được ngoại lệ ném, tôi đã không nhận được nó trong ILogger, đây có phải là hành vi bình thường không? Nếu không, tôi có thể thử lại một lần nữa (vì hiện tại tôi đã thực hiện phương pháp Global Filter), và nếu đó là trường hợp tôi có thể viết về nó trên github. –
Vâng, nếu bạn bắt được ngoại lệ, không ai khác sẽ nhìn thấy nó, vì vậy không có gì để đăng nhập. Nhưng bạn có thể rất đúng khi có một số thành phần khác, chẳng hạn như xử lý lỗi phần mềm trung gian, không ghi nhật ký ngoại lệ. Có thể phù hợp với https://github.com/aspnet/Diagnostics repo. – Eilon