1. 程式人生 > >利用ASP .NET Core的靜態檔案原理實現遠端訪問Nlog日誌內容及解決遇到的坑

利用ASP .NET Core的靜態檔案原理實現遠端訪問Nlog日誌內容及解決遇到的坑

      最近專案上試執行發現,很多時候網站出了問題或者某個功能不正常,常常需要運維人員去伺服器裡面檢視一下日誌,看看日誌裡面會產生什麼異常,這樣導致每次都要去遠端伺服器很不方便,有時伺服器是客戶保管的不能讓我們隨意遠端,最後想到靜態檔案方法將log日誌讀出來列印到網頁上就可以替換遠端伺服器找到對應log日誌的目錄,節省了時間和溝通成本;另:我們是局域內網系統不是網際網路所以對安全不用太考慮,這樣才能把日誌輸出到頁面上面,如果網際網路產品或者安全比較高的不建議這麼做

      簡單說一下實現步驟:

        一、 首先我們是通過Nlog來記錄日誌的,Nlog怎麼使用我這不介紹了,在上篇文章已有說明

       二、 在Startup類Configure中加入靜態檔案路由的方式

 #region 遠端讀取日誌
            FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider(); 
            provider.Mappings[".log"] = "text/plain";
            string basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(basePath, "logs")),
                ServeUnknownFileTypes = true,
                RequestPath = new PathString("/logs"),
                ContentTypeProvider = provider,
                DefaultContentType = "application/x-msdownload", // 設定未識別的MIME型別一個預設z值

            });
            app.UseDirectoryBrowser(new DirectoryBrowserOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(basePath, "logs")),
                RequestPath = new PathString("/logs"),
            });
            #endregion

       三、執行介面:

      

      四、點選需要檢視的日誌發現 中文都是亂碼

   五、然而直接通過檔案開啟日誌,並顯示亂碼

 

    六、以上驗證  這樣說明不是Nlog寫入的時候為亂碼,最後考慮是不是讀取的時候輸出為亂碼,我自己在logs資料夾下面建了一個text檔案,利用網頁讀取資訊,也不是亂碼,如圖所示:

 

      七、經過多次驗證發現2個問題:1.Nlog在寫入日誌建日誌檔案的時候編碼格式為default,實際格式ANSI,需要把檔案改成通用編碼UTF-8 ; 

                                                    這樣直接在nlog配置檔案 檔案寫入規則裡面加一個編碼設定【encoding="utf-8"】

                                                     2. 讀取.log型別時必須也要設定讀取型別

                                                    這樣直接將 provider.Mappings[".log"] = "text/plain"; 修改為 provider.Mappings[".log"] = "text/plain;charset=utf-8";

         八、     執行驗證,中文沒有亂碼

    Demo原始碼Git地址:https://github.com/lxshwyan/QuartzDemo.git

                           &n