1. 程式人生 > >.Net Core 整合ExceptionLess分散式日誌框架之本地化部署

.Net Core 整合ExceptionLess分散式日誌框架之本地化部署

## 前言 公司目前使用的專案中關於日誌記錄這塊,之前一直都是使用的Log4net 存放於後臺文件中的,對於異常錯誤啊,或者需要檢視一些詳情錯誤的時候感覺很不方便,要到伺服器上去開啟日誌檔案檢索錯誤,降低了解決問題的速度,所以針對日誌這塊的優化就提上日程了。考慮了好久決定採用ExceptionLess日誌框架來處理和收集系統日誌。在實際操作中我也遇到了很多坑,現在將ExceptionLess分散式日誌框架在Windows上的本地化部署做個記錄。 ## 一.安裝ExceptionLess [GitHub](https://github.com/exceptionless/Exceptionless/)上有關於ExceptionLess的詳細介紹,我們的準備工作主要有以下幾點: .net4.7 IIS 7.5+ [PowerShell 3+](https://www.microsoft.com/en-us/download/details.aspx?id=34595) [Java JDK 1.8+](http://www.oracle.com/technetwork/java/javase/downloads/index.html) 由於本地環境和生成環境使用的都是Windows,所以針對Exceptionless的部署就重點在如何部署在Windows上的問題了,網上也有很多相關文件是直接部署在Linux的,但這不是我們本文的重點。 關於Java環境的配置可以參考下面文章[Java安裝與環境配置]( https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html )文章寫的很詳細,跟著配置下來是不會有太大問題的。 接著,我們來下載ExceptionLess的最新版本,GitHub上最新的版本是[ExceptionLess4.1.2861](https://github.com/exceptionless/Exceptionless/releases) 下載完後解壓檔案,可以看到如下幾個檔案 ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153612663-1149866229.png) 其中Start.bat用於快速啟動的批處理檔案,其實就是執行ElasticSearch和WebSite.ps1這兩個檔案,它會幫我們安裝執行ElasticSearch和Kibana. 在這一步安裝的過程中問題最多,也是最難解決的,真的是折騰了好久。 1.Q:執行Start.bat 顯示 請求被中止:未能建立SSL/TLS安全通道. A:在ElasticSearch.ps1檔案中,命令執行前加上如下一行命令: [System.Net.ServicePointManager]: :SecurityProtocol=System.Net.SecurityProtocolType::Tls12 ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153631517-23064105.png) ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153639616-153697386.png) 2.緊接著,再次啟動Start.bat,可以看到終於正常下載並寫入web流了,這個過程好像也很漫長,我記得當時晚上走的時候電腦沒關,就一直讓它下載了。這個好像也和本身自己的網路有關係。 等待下載中,剛剛的檔案裡就會多了幾個資料夾. ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153656950-1228226417.png) ExceptionLess預設的埠是50000,如果執行正常,在瀏覽器裡輸入localhost:50000,會顯示登入頁面, 但是我第一次顯示的卻是個an error occurred trying to red the response from the specified node. ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153708520-1137934266.png) 查閱相關資料後,得知是每次訪問時,需要先 啟動ElasticSearch服務,這裡,我直接將ElasticSearch服務註冊到了Windows上,每次開機自動啟動該服務,省去了每次執行Start.bat 然後一次開啟4個dos視窗的麻煩。 ElasticSearch註冊服務,在node1的bin目錄下執行cmd開啟命令視窗 ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153720948-1602112944.png) 執行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裡可以這樣寫 ```c# 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是否能捕獲到. ```c# public ActionResult> Get() { throw new Exception($"看這裡異常了!時間:{DateTime.Now}"); return new string[] { "value1", "value2" }; } ``` ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153741923-1382028576.png) 可以看到我們的ExceptionLess成功捕獲到了異常,當然我們也可以手動提交一個異常資訊到ExceptionLess上去,具體的寫法就是: ```c# // GET api/values/5 [HttpGet("{id}")] public ActionResult Get(int id) { try { throw new Exception("異常"); return "value"; } catch (Exception ex) { ex.ToExceptionless().Submit(); } return "value"; } ``` 當然,這些例子都很簡單,其實最重要的就是Exceptionless的安裝過程,實在是遇到了很多讓人頭大的問題,不過好在這些問題最後都解決了。 目前ExceptionLess日誌框架只在本地的測試環境裡安裝部署了,網上有小夥伴說到的生成環境下的時區問題,由於暫時還沒部署到生成環境,這個問題也就暫時還沒遇到,等真正遇到的時候再來詳細研究如何解決處理吧。 ## 三.結束語 參考文獻: 本文在編輯過程中參考以下文章的部分內容和資料,在此表示感謝。 依樂祝,《[Exceptionless安裝配置及簡單實用](https://www.cnblogs.com/yilezhu/p/9193723.html)》 markjiang7m2 ,《[Exceptionless - .Net Core開源日誌框架](https://www.cnblogs.com/markjiang7m2/p/11020140.html)》 markjiang7m2 ,《[Exceptionless(二) - 本地部署使用進階](https://www.cnblogs.com/markjiang7m2/p/11100563.html)》 Java環境變數配置《[Java環境變數配置](https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html )》 再次對以上作者表示感謝. 對於Exceptionless的使用,我也是僅僅開始入門,ExceptionLess的一些其他強大的功能還等著我們去進一步挖掘和深入研究的.希望本文給其他的小夥伴一些幫助,歡迎大家來一起探討交流,我是程式猿貝塔. ![](https://img2020.cnblogs.com/blog/1447233/202006/1447233-20200630153757325-20172668