Core統一日誌處理
阿新 • • 發佈:2019-01-26
註意 tail dep 完成 pre 它的 spa 技術 control
新建一個Core的Web項目,然後創建相關文件等
添加一個處理錯誤的類庫ErrorMiddleware 下面是該類庫的代碼
public class ErrorMiddleware { static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private readonly RequestDelegate next; public ErrorMiddleware(RequestDelegate next) {this.next = next; } public async Task Invoke(HttpContext context /* other dependencies */) { try { await next(context); } catch (Exception ex) { ErrorExceptionAsync(context, ex); } }private static void ErrorExceptionAsync(HttpContext context, Exception error) { var statusCode = (int)HttpStatusCode.InternalServerError; if (error is UnauthorizedAccessException) { // to prevent login prompt in IIS // which will appear when returning 401.statusCode = (int)HttpStatusCode.Forbidden; } if (statusCode != 404 && statusCode != 403) { logger.Error(error); } } }
到這裏標紅的兩個是需要註意的
RequestDelegate是一種委托類型,其全貌為public delegate Task RequestDelegate(HttpContext context)
,MSDN上對它的解釋,"A function that can process an HTTP request."——處理HTTP請求的函數。唯一參數,是最熟悉不過的HttpContext,返回值則是表示請求處理完成的異步操作類型。
可以將其理解為ASP.NET Core中對一切HTTP請求處理的抽象(委托類型本身可視為函數模板,其實現具有統一的參數列表及返回值類型),沒有它整個框架就失去了對HTTP請求的處理能力。
Invoke這個我們後面再說
現在我們需要跑起來項目 在Startup 下面的Configure裏加上如下代碼
app.UseMiddleware(typeof(ErrorMiddleware)); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
然後全局的日誌就可以在ErrorMiddleware這個類庫裏查看報錯了 其中
Invoke 這個名字是不可以改變的 它是一個中間件調用 改了就會報錯!!!
Core統一日誌處理