1. 程式人生 > >Core統一日誌處理

Core統一日誌處理

註意 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統一日誌處理