Post on 26-May-2015
description
ASP.NET MVC 偵測監控與 Log 記錄
使用 ELMAH 與 NLog
Kevin Tseng http://kevintsengtw.blogspot.com
你~!是怎麼知道系統發生錯誤呢?
2
你~!是怎麼知道系統發生錯誤呢?
3
發生錯誤的原因...
客戶……
好一點,可以提供清楚資訊 普通的,會說剛剛做了什麼事 大部分,一問三不知或是…
4
發生錯誤的原因...
客戶……
好一點,可以提供清楚資訊 普通的,會說剛剛做了什麼事 大部分,一問三不知或是…
5
遇到錯誤時...開發人員好像都這樣反應
1. 在我的機器明明就可以動啊! 2. 一定是你的資料有問題。 3. 你到底是輸入了什麼? 4. 以前從來不會這樣啊! 5. 昨天明明會動的啊! 6. 一定是還沒更新到最新版本. 7. 怎麼可能~ 8. 這一定是機器的問題。 9. 有 bug 是正常的!XD
6
程式開發人員掌握多少資訊?
7
• 如何得知錯誤的發生?
• 發生什麼樣的錯誤?
• 什麼地方發生錯誤?
• 錯誤發生的原因?
工欲善其事 必先利其器
程式開發人員的清醒時間是有限的, 不應該把這寶貴的時間浪費在無盡的錯誤上。 善用工具!更有效的掌握發生錯誤的原因
8
ELMAH Error Logging Modules and Handlers for ASP.NET
官網:http://code.google.com/p/elmah/
ELMAH(錯誤日誌記錄模組和處理常式)是一個應用廣泛的
錯誤記錄的裝置。它可以添加到一個正在運行的
ASP.NET Web Application。
應用在 ASP.NET WebForms 與 ASP.NET MVC 網站上。
ELMAH:Error Logging Modules and Handlers
10
記錄系統中幾乎所有未處理的異常例外
可遠端瀏覽這些由ELMAH所記錄下來的異常例外
可遠端瀏覽異常例外記錄的完整細節,包含stack trace
可知道系統錯誤黃頁的完整資訊
可以透過電子郵件的方式寄發錯誤通知
提供 RSS,由 RSS 可以獲取最近的 15 則記錄
ELMAH
在不必插入或是改變你的程式碼情況下,ELMAH提供以下的功能:
11
Microsoft SQL Server
Oracle
SQLite (version 3) database file
Microsoft Access
Loose XML files
RAM (in-memory) …… Default
SQL Server Compact Edition
MySQL
PostgreSQL
ELMAH 支援的儲存裝置
12
ELMAH Dashboard
13
ELMAH Log Details
14
ELMAH Log Details
15
DEMO:使用 NuGet 為專案安裝 ELMAH
16
DEMO:將記錄資料存到 SQL Server
17
DEMO:關閉系統錯誤黃頁
18
customError 的重大資安弱點
<customErrors mode="On" defaultRedirect="~/Error/Unknown"> <error statusCode="404" redirect="~/Error/NotFound" /> <error statusCode="500" redirect="~/Error/internal" /> </customErrors>
黑暗執行緒 - 【重要提醒】請全面檢視並修改web.config customErrors! http://blog.darkthread.net/post-2010-09-20-fix-customerrors-now.aspx 小朱® 的技術隨手寫 - [ASP.NET] ASP.NET 零時差攻擊 – POET 原理與防禦措施 http://www.dotblogs.com.tw/regionbbs/archive/2010/09/21/asp.net.poet.security.vulnerability.aspx Will 保哥- ASP.NET 發現重大資安弱點影響範圍涵蓋 ASP.NET 1.0 ~ 4.0 http://blog.miniasp.com/post/2010/09/19/Security-Hack-Exposes-Forms-Authentication-in-ASPNET.aspx
安裝 ASP.NET 更新程式
黑暗執行緒 - 【重要消息】ASP.NET安全弱點更新程式出爐了!
http://blog.darkthread.net/blogs/darkthreadtw/archive/2010/09/29
/asp-net-security-update.aspx
處理錯誤,並回傳一致的HTTP狀態
如果是用 Global.asax 內的 Application_Error 事件
來捕捉 HTTP 錯誤時,所有錯誤都須回傳相同的HTTP狀態
回傳錯誤頁時,將回應時間拉長
修正 customError 的重大資安弱點
修正 customError 的重大資安弱點
<!-- for ASP.NET 1.0-3.5 (non SP1) --> <configuration> <system.web> <customErrors mode="On" defaultRedirect="~/Error" /> </system.web> </configuration> <!-- for ASP.NET 3.5 SP1 and 4.0 --> <configuration> <system.web> <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error" /> </system.web> </configuration>
DEMO:errorFiltering 排除 404 錯誤
NO!
22
Remember Me !
DEMO:無視 ELMAH 安全性設定的實例
23
ELMAH 的安全性
24
DEMO:ELMAH的安全性設定
25
NLog Advance .NET Logging
官網:http://nlog-project.org/
ELMAH 是用來作為日誌記錄,主要工作是捕捉未處理的異常
(UnHandler Exception),所以有處理的異常就無法捕
捉(try…catch..)。
NLog 讓我們可以在程式裡去處理異常時,依據異常的狀況
而給予不同的等級,NLog 除了處理記錄的儲存外還可以再
依據使用者所定義的等級做後續不同處理方式的操作。
NLog
27
Files – single file or multiple, with automatic file naming and
archival
Event Log – local or remote
Database – store your logs in databases supported by .NET
Network – using TCP, UDP, SOAP, MSMQ protocols
Command-line console – including color coding of messages
E-mail – you can receive emails whenever application errors
occur
ASP.NET trace
… and many more
NLog targets – 支援多種的儲存目標
28
Trace:用於追蹤,可以在程式裡需要追蹤的地方將訊息以Trace傳出。
Debug:用於開發,於開發時將一些需要特別關注的訊息以Debug傳出。
Info:訊息,記錄不影響系統執行的訊息,通常會記錄登入登出或是資料的
建立刪除、傳輸等。
Warn:警告,用於需要提示的訊息,例如庫存不足、貨物超賣、餘額即將不
足等。
Error:錯誤,記錄系統實行所發生的錯誤,例如資料庫錯誤、遠端連線錯
誤、發生例外等。
Fatal:致命,用來記錄會讓系統無法執行的錯誤,例如資料庫無法連線、
重要資料損毀等。
NLog rules – 記錄的等級
29
DEMO:使用 NuGet 安裝 NLog
30
DEMO:將 NLog 訊息儲存在 SQL Server
31
DEMO:設定並使用 Email 寄發 Log 訊息
32
Log Reporting Dashboard Darren Weir
提供一個整合 ELMAH,NLog,log4net,ASP.NET Health Monitoring
記錄訊息的平台
ASP.NET MVC 2
Log Reporting Dashboard for ASP.NET MVC
http://www.codeproject.com/Articles/104112/Log-Reporting-
Dashboard-for-ASP-NET-MVC
Adding the Log Reporting Dashboard to your ASP.Net MVC
app (with MVC Turbine)
http://www.youtube.com/watch?v=Hicjp5MODpI
什麼是 Log Reporting Dashboard
34
DEMO:設定 ELMAH 與 NLog
35
DEMO:Log Reporting Dashboard
36
使用 ELMAH 記錄系統中的未處理異常資訊
允許遠端瀏覽 ELMAH 前必須做好安全性的設定
使用 NLog 記錄系統中任何處理訊息
使用 Log Reporting Dashboard 統一讀取 Log
資料
總結 - ASP.NET MVC 偵測監控與 Log 記錄
37
ELMAH
http://code.google.com/p/elmah/
NLog
http://nlog-project.org/
Log Reporting Dashboard
http://mvclogging.codeplex.com/
http://www.codeproject.com/Articles/104112/Log-
Reporting-Dashboard-for-ASP-NET-MVC
http://dotnetdarren.wordpress.com/
參考資料
38
mrkt的程式學習筆記 -系統記錄與效能監測
39
http://kevintsengtw.blogspot.tw/p/blog-page_30.html
我敢跟妳賭,十年後 …… 我連 LOG 是什麼都不知道,照樣活得很好。
謝謝各位 !
41
我們熱愛 Web 開發技術,並樂於分享 ASP.NET MVC 開發心得
已成功建立數個灘頭堡的經驗,深知 MVC 開發模式條理分明,有
利於分工與管理,想推薦給尚未了解的開發人員
不願意看到 MVC 叫好不叫座,我們樂意透過經驗交換來破除導入
障礙
42
為何組成 twMVC
每週小型聚會,不特定主題
固定於每週四 19:30-21:30,不改時間,逢國定假日暫停一次
議程不會提前排定,以當天參加者最近的心得分享為主
舉辦不定期研討會
44
twMVC 做哪些事推廣 ASP.NET MVC 技術
預先設定主題的中大型會議,主題提前於 mvc.tw 上公告
原則上一個月排定一次,因場地關係會設定報名人數上限
45
twMVC 不定期研討會
46
本次線上問卷
http://www.accupass.com/Question/522076701012640