前言
公司目前使用的項目中關於日志記錄這塊,之前一直都是使用的Log4net 存放於后台文件中的,對於異常錯誤啊,或者需要查看一些詳情錯誤的時候感覺很不方便,要到服務器上去打開日志文件檢索錯誤,降低了解決問題的速度,所以針對日志這塊的優化就提上日程了。考慮了好久決定采用ExceptionLess日志框架來處理和收集系統日志。在實際操作中我也遇到了很多坑,現在將ExceptionLess分布式日志框架在Windows上的本地化部署做個記錄。
一.安裝ExceptionLess
GitHub上有關於ExceptionLess的詳細介紹,我們的准備工作主要有以下幾點:
.net4.7
IIS 7.5+
由於本地環境和生成環境使用的都是Windows,所以針對Exceptionless的部署就重點在如何部署在Windows上的問題了,網上也有很多相關文檔是直接部署在Linux的,但這不是我們本文的重點。
關於Java環境的配置可以參考下面文章Java安裝與環境配置文章寫的很詳細,跟着配置下來是不會有太大問題的。
接着,我們來下載ExceptionLess的最新版本,GitHub上最新的版本是ExceptionLess4.1.2861
下載完后解壓文件,可以看到如下幾個文件
其中Start.bat用於快速啟動的批處理文件,其實就是執行ElasticSearch和WebSite.ps1這兩個文件,它會幫我們安裝運行ElasticSearch和Kibana.
在這一步安裝的過程中問題最多,也是最難解決的,真的是折騰了好久。
1.Q:執行Start.bat 顯示 請求被中止:未能建立SSL/TLS安全通道.
A:在ElasticSearch.ps1文件中,命令執行前加上如下一行命令:
2.緊接着,再次啟動Start.bat,可以看到終於正常下載並寫入web流了,這個過程好像也很漫長,我記得當時晚上走的時候電腦沒關,就一直讓它下載了。這個好像也和本身自己的網絡有關系。
等待下載中,剛剛的文件里就會多了幾個文件夾.
ExceptionLess默認的端口是50000,如果執行正常,在瀏覽器里輸入localhost:50000,會顯示登錄頁面,
但是我第一次顯示的卻是個an error occurred trying to red the response from the specified node.
查閱相關資料后,得知是每次訪問時,需要先 啟動ElasticSearch服務,這里,我直接將ElasticSearch服務注冊到了Windows上,每次開機自動啟動該服務,省去了每次執行Start.bat 然后一次打開4個dos窗口的麻煩。
ElasticSearch注冊服務,在node1的bin目錄下執行cmd打開命令窗口
執行elasticsearch-sevice.bat install 去安裝服務. 執行elsticsearch-service.bat start 去開啟服務
后續我們直接在服務里將該服務的啟動方式設為自動,即可完成注冊.
接着我們將ExceptionLess部署到IIS上,新建一個網站,目錄為wwwroot.端口號默認為50000,如果你需要修改端口號,
記得在app.config.xxxx.js 修改BASE_URL ;
在 web.config 的
Start-Website.ps1文件的最后兩行的端口號,也需要修改.
經過這一番折騰,我們終於可以訪問本地的Exceptionless了。
二.ExceptionLess在.net Core 項目下的配置
由於我們使用的項目環境為.net core ,所以我們在Exceptionless里新建一個組織,名稱隨便,接着新建一個項目,項目框架選擇 Exceptionless.AspNetCore
使用的方法也很簡單,直接在項目的startup.cs 里使用 app.UseExceptionless(“XXXXXAPI密鑰”).
這里,我將ExceptionLess的一些配置放在了appsettings.json里於是我們在startup.cs里可以這樣寫
var isEnableLogger = Convert.ToBoolean(_appConfiguration["Exceptionless:Enabled"] ?? "false");
if (isEnableLogger)
{
// 封裝使用Exceptionless分布式日志組件
ExceptionlessClient.Default.Configuration.ApiKey = _appConfiguration["Exceptionless:ApiKey"];
ExceptionlessClient.Default.Configuration.ServerUrl = _appConfiguration["Exceptionless:ServerUrl"];
app.UseExceptionless();
}
接着我們可以嘗試手動拋一個異常出來,看看ExceptionLess是否能捕獲到.
public ActionResult<IEnumerable<string>> Get()
{
throw new Exception($"看這里異常了!時間:{DateTime.Now}");
return new string[] { "value1", "value2" };
}
可以看到我們的ExceptionLess成功捕獲到了異常,當然我們也可以手動提交一個異常信息到ExceptionLess上去,具體的寫法就是:
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
try
{
throw new Exception("異常");
return "value";
}
catch (Exception ex)
{
ex.ToExceptionless().Submit();
}
return "value";
}
當然,這些例子都很簡單,其實最重要的就是Exceptionless的安裝過程,實在是遇到了很多讓人頭大的問題,不過好在這些問題最后都解決了。
目前ExceptionLess日志框架只在本地的測試環境里安裝部署了,網上有小伙伴說到的生成環境下的時區問題,由於暫時還沒部署到生成環境,這個問題也就暫時還沒遇到,等真正遇到的時候再來詳細研究如何解決處理吧。
三.結束語
參考文獻:
本文在編輯過程中參考以下文章的部分內容和資料,在此表示感謝。
依樂祝,《Exceptionless安裝配置及簡單實用》
markjiang7m2 ,《Exceptionless - .Net Core開源日志框架》
markjiang7m2 ,《Exceptionless(二) - 本地部署使用進階》
Java環境變量配置《Java環境變量配置》
再次對以上作者表示感謝.
對於Exceptionless的使用,我也是僅僅開始入門,ExceptionLess的一些其他強大的功能還等着我們去進一步挖掘和深入研究的.希望本文給其他的小伙伴一些幫助,歡迎大家來一起探討交流,我是程序猿貝塔.