利用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
原文地址:https://www.cnblogs.com/lxshwyan/p/10910315.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的利用ASP .NET Core的静态文件原理实现远程访问Nlog日志内容及解决遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Net Core下使用RabbitMQ比
- 下一篇: 使用.NET Core 编写端到端测试