<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Exceptionless 是一個開源的實時的紀錄檔收集框架,它可以應用在基於 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術開發的應用程式中,並且提供了REST介面可以應用在 Javascript,Node.js 中。(基本就是.Net技術棧的一套東西)
專案地址:https://github.com/exceptionless/Exceptionless
它將紀錄檔收集變得簡單易用並且不需要了解太多的相關技術細節及設定,對於微服務架構的應用程式來說,統一的紀錄檔收集系統的建立更是有必要。
要使用的話只需要在其官網上註冊個賬號,然後在程式碼中設定一下APIKey就可以了,不過免費版額度有限,當然還是自己部署一套比較好,這次依然使用docker部署
docker部署可以在GitHub下載程式碼自己構建,也可以用官方打包好的映象,為了方便這裡我直接使用官方打包的映象
docker-compose.yml
內容如下
可以看到其中包含5個容器:ExceptionLess App、ExceptionLess Job、elasticsearch、kibana、Redis
version: '3.7' services: app: depends_on: - elasticsearch - redis image: exceptionless/app:latest environment: EX_AppMode: Production EX_ConnectionStrings__Cache: provider=redis EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200 EX_ConnectionStrings__MessageBus: provider=redis #EX_ConnectionStrings__Metrics: provider=statsd;server=statsd; EX_ConnectionStrings__Queue: provider=redis EX_ConnectionStrings__Redis: server=redis,abortConnect=false EX_ConnectionStrings__Storage: provider=folder;path=/app/storage # 官方設定預設包含HTTPS,我把它關了 #ASPNETCORE_URLS: http://+;https://+ ASPNETCORE_URLS: http://+ # 關了HTTPS,這個埠也不用設定了 #ASPNETCORE_HTTPS_PORT: 5001 # 關了HTTPS,證書也不用設定 #ASPNETCORE_Kestrel__Certificates__Default__Password: password #ASPNETCORE_Kestrel__Certificates__Default__Path: /https/aspnetapp.pfx EX_RunJobsInProcess: 'false' ports: - 5000:80 # 關了HTTPS,不需要對映443埠 #- 5001:443 volumes: - ex_appdata:/app/storage - ex_ssldata:/https jobs: depends_on: - app image: exceptionless/job:latest environment: EX_AppMode: Production # UI地址,修改這裡的IP地址為你的伺服器IP地址 EX_BaseURL: http://你的IP:5000 EX_ConnectionStrings__Cache: provider=redis EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200 # 郵件設定 EX_ConnectionStrings__Email: smtps://郵箱地址:密碼@SMTP伺服器:埠 EX_SmtpFrom: 發件郵箱地址 EX_ConnectionStrings__MessageBus: provider=redis #EX_ConnectionStrings__Metrics: provider=statsd;server=statsd; EX_ConnectionStrings__Queue: provider=redis EX_ConnectionStrings__Redis: server=redis,abortConnect=false EX_ConnectionStrings__Storage: provider=folder;path=/app/storage volumes: - ex_appdata:/app/storage elasticsearch: image: exceptionless/elasticsearch:7.15.2 environment: discovery.type: single-node xpack.security.enabled: 'false' ES_JAVA_OPTS: -Xms1g -Xmx1g ports: - 9200:9200 - 9300:9300 volumes: - ex_esdata:/usr/share/elasticsearch/data kibana: depends_on: - elasticsearch image: docker.elastic.co/kibana/kibana:7.15.2 ports: - 5601:5601 redis: image: redis:6.0-alpine ports: - 6379:6379 volumes: ex_esdata: driver: local ex_appdata: driver: local ex_ssldata: driver: local
郵件設定是比較麻煩的地方,我查了一些資料才解決
在jobs
容器中的這兩個環境變數裡設定
EX_ConnectionStrings__Email: smtps://郵箱地址:密碼@SMTP伺服器:埠 EX_SmtpFrom: 發件郵箱地址
有坑的地方就是EX_ConnectionStrings__Email
變數的郵箱地址需要對@符號進行跳脫,用%40
代替@符號
以我的自建郵箱為例,郵箱地址是:test@dealiaxy.com,那麼設定就是這樣
EX_ConnectionStrings__Email: smtps://test%40dealiaxy.com:密碼@SMTP伺服器:埠 EX_SmtpFrom: test@dealiaxy.com
這樣設定完成就可以正常發郵件了~
PS:還可以設定Webhook實現報錯自動推播到微信、釘釘之類的平臺,不細說了
我主要使用的.Net技術棧是AspNetCore,其他專案可以參考官方檔案的整合教學
首先在ExceptionLess中建立一個專案,把APIKey複製下來
編輯AspNetCore專案的appsettings.json
檔案,增加設定
"Exceptionless": { "ServerUrl": "http://12.0.0.1:5000", "ApiKey": "Rajo99MksQTS6zZK81238jTkNHNOQP33A3iW45JC" }
然後編輯Program.cs
,新增服務和中介軟體
builder.Services.AddExceptionless(builder.Configuration); app.UseExceptionless();
整合這一步就搞定了
記錄事件
Exceptionless中的事件有以下幾種型別:
除此之外,每個事件還可以附加tags、object、UserIdentity、Description之類的資訊,有這些資訊的輔助可以方便後續排查問題。
最簡單的使用
ExceptionlessClient.Default.CreateLog("message").Submit();
CreateLog
方法會放回一個EventBuilder
型別的物件,之後在這個物件上進行大部分操作支援鏈式呼叫
可以像上面那樣一行程式碼鏈式呼叫,也可以這樣
// 先建立 var eventBuilder = ExceptionlessClient.Default.CreateLog("message"); // 再來慢慢新增 eventBuilder.AddObject(...); eventBuilder.AddTags(...); // 最後提交 eventBuilder.Submit();
可以附加到事件中的資訊有很多,下面是官網提供的一些例子
// Set the reference id of the event so we can search for it later (reference:id). // This will automatically be populated if you call ExceptionlessClient.Default.Configuration.UseReferenceIds(); .SetReferenceId(Guid.NewGuid().ToString("N")) // Add the order object but exclude the credit number property. .AddObject(order, "Order", excludedPropertyNames: new [] { "CreditCardNumber" }, maxDepth: 2) // Set the quote number. .SetProperty("Quote", 123) // Add an order tag. .AddTags("Order") // Mark critical. .MarkAsCritical() // Set the coordinates of the end user. .SetGeo(43.595089, -88.444602) // Set the user id that is in our system and provide a friendly name. .SetUserIdentity(user.Id, user.FullName) // Set the users description of the error. .SetUserDescription(user.EmailAddress, "I tried creating an order from my saved quote.")
例如,使用SetUserIdentity
設定了使用者資訊,在異常列表就可以看到使用者名稱,如圖
用AddTags
新增標籤,在頁面中以badge的形式顯示
還有AddObject
,很方便,可以直接把物件傳進去,由於C#語言有匿名物件,那就更方便了,在頁面上的“擴充套件資料”分頁上可以看到,ExceptionLess會把物件處理成表格形式,更加直觀
ExceptionLess提供了Exception物件的擴充套件方法
可以catch到錯誤後直接Submit
try {} catch (Exception ex) { ex.ToExceptionless().Submit(); }
當然也可以附加一些資訊進去
ex.ToExceptionless().AddObject(...).Submit();
除了手動提交事件,它還提供了與現有紀錄檔框架整合的方法
安裝對應的nuget包就行(簡單搜了一下,至少對Log4net和NLog的支援應該是沒啥問題的)
以與Log4net整合為例,首先安裝nuget包:Exceptionless.Log4net
附上一個簡單的Log4net設定
<log4net> <appender name="exceptionless" type="Exceptionless.Log4net.ExceptionlessAppender,Exceptionless.Log4net"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="exceptionless"/> </root> </log4net>
雖然官方只支援.Net平臺和前端(js呼叫、vue3),不過ExceptionLess提供了大量的HTTP介面,想要在其他語言的專案中使用,只需要呼叫對應的介面就行了,甚至可以自己封裝一個
不過在其他語言的專案中,我推薦使用Sentry(下一篇文章要介紹的),支援的語言/框架更多,ExceptionLess的優勢在於和AspNetCore這類.Net平臺的結合更好,結果頁面更直觀~
話說回來,ExceptionLess的介面檔案(Swagger)在/docs/index.html
,根據部署地址存取就能看到,裡面你要的功能基本都有。
官方 Self Hosting Wiki:https://github.com/exceptionless/Exceptionless/wiki/Self-Hosting
.NET Core微服務之基於Exceptionless實現分散式紀錄檔記錄:https://www.cnblogs.com/edisonchou/p/exceptionless_foundation_and_quick_start.html
開源紀錄檔框架Exceptionless使用教學:https://www.cnblogs.com/youring2/p/11546485.html
Exceptionless 5.x 無法正常傳送郵件的問題解決 :https://www.cnblogs.com/edisonchou/p/solve_the_problem_of_exceptionless_on_cannot_send_emails.html
到此這篇關於ExceptionLess的安裝、設定、使用教學的文章就介紹到這了,更多相關ExceptionLess安裝使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45