Ask me anything
Ithy Logo
Sign in to save

安裝 ELMAH 工具至無原始碼的 IIS 10 站台

完整步驟與最佳調整參數指南,助您無縫整合 ELMAH 監控工具

IIS server setup with ELMAH monitoring

主要重點摘要

  • 下載與部署 ELMAH 必需檔案:從官方來源取得 ELMAH 並將其部署至 IIS 站台的適當目錄。
  • 修改 Web.config 配置:設置 ELMAH 所需的配置段落,確保正確運行。
  • 安全性與遠端存取設置:控制 ELMAH 的訪問權限,保護錯誤日誌的安全。

步驟一:下載 ELMAH

選擇適合的下載來源

ELMAH(Error Logging Modules and Handlers)是一款用於 ASP.NET 應用程式錯誤監控的工具。以下是下載 ELMAH 的主要來源:

官方 GitHub 頁面

NuGet 包管理器

  • 訪問 NuGet Gallery - ELMAH。
  • 使用 NuGet 命令下載 ELMAH 庫,並提取相關 DLL 文件。
  • 下載 ELMAH.dll 及其相關依賴項(如 Newtonsoft.Json.dll)

其他下載方式

  • 可選擇從 ELMAH 的官方網站或其他可信來源下載完整的安裝包。

步驟二:部署 ELMAH 至 IIS 10 站台

將 ELMAH 所需檔案複製至站台目錄

  1. 將 DLL 文件複製到站台的 bin 目錄:

    • 找到您 IIS 站台的根目錄(例如:C:\inetpub\wwwroot\YourSite)。
    • 如果不存在 bin 目錄,請手動建立一個。
    • 將 Elmah.dll 以及其他必要的 DLL 文件(如從 NuGet 下載的)複製到 bin 目錄中。
  2. 添加 ELMAH 的相關檔案:

    • 如果有 ELMAH 的 XML 配置文件(如 Elmah.xml),請確保其放置在站台的適當位置,例如 App_Data 目錄。

修改 Web.config 文件

為了讓 ELMAH 正常運作,需在站台的 Web.config 文件中添加必要的配置。請依照以下步驟操作:

  1. 新增 configSections:

    <configuration>
      <configSections>
        <sectionGroup name="elmah">
          <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
          <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
          <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
          <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
        </sectionGroup>
      </configSections>
    
  2. 新增 ELMAH 配置節點:

    <elmah>
      <security allowRemoteAccess="true" />
      <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" />
    </elmah>
    
  3. 配置 system.web 區段:

    <system.web>
      <httpModules>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
      </httpModules>
    </system.web>
    
  4. 配置 system.webServer 區段:

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true">
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
      </modules>
    </system.webServer>
    

步驟三:啟用 ELMAH 的遠端存取與安全配置

設定遠端存取權限

為了控制誰可以訪問 ELMAH 的錯誤日誌頁面,您需要在 Web.config 中進行相應的設置:

  1. 允許遠端存取:在 <elmah> 區段中,設置 allowRemoteAccess:

    <elmah>
      <security allowRemoteAccess="false" />
    </elmah>
    
    建議在生產環境中將其設置為 false 以防止未授權訪問。

  2. 限制特定 IP 或使用者訪問:新增 <location> 區段來限制訪問 ELMAH 頁面:

    <location path="elmah.axd">
      <system.web>
        <authorization>
          <allow roles="Admin" />
          <deny users="*" />
        </authorization>
      </system.web>
    </location>
    
    以上設置僅允許具備 Admin 角色的用戶訪問 ELMAH 頁面,其他用戶將被拒絕。

設置錯誤日誌存儲位置與權限

確保 ELMAH 有權限寫入錯誤日誌文件:

  • 確保配置中的 logPath 指向一個存在且具有寫入權限的目錄,例如:~/App_Data/Elmah.Errors。
  • 檢查 IIS 應用程式池帳戶對該目錄具有適當的讀寫權限。

步驟四:測試 ELMAH 功能

確認安裝是否成功

  1. 重新啟動 IIS 站台,確保所有配置更改生效。
  2. 在瀏覽器中訪問 http://yoursite/elmah.axd。
  3. 應該會看到 ELMAH 的錯誤日誌頁面。如果頁面無法訪問,請檢查 Web.config 配置和文件權限。

觸發並檢查錯誤記錄

  1. 嘗試訪問一個不存在的頁面,例如 http://yoursite/nonexistentpage,以觸發 404 錯誤。
  2. 再次訪問 http://yoursite/elmah.axd,確認錯誤是否已被成功記錄。

推薦的 ELMAH 調整參數

錯誤日誌儲存位置

設定 ELMAH 的錯誤日誌儲存位置,以定義錯誤資訊的保存方式和存儲位置:

<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" maxSize="100" />

參數說明:

  • type:指定錯誤日誌的存儲類型,默認為 XML 文件。
  • logPath:定義錯誤日誌的存儲路徑。
  • maxSize:設置單個日誌文件的最大大小(單位:MB)。

錯誤郵件通知

配置 ELMAH 以便在發生錯誤時發送郵件通知:

<errorMail from="noreply@yoursite.com"
          to="admin@yoursite.com"
          subject="Error Notification"
          async="true"
          smtpServer="smtp.yoursite.com" />

參數說明:

  • from:發件人地址。
  • to:收件人地址。
  • subject:郵件主題。
  • async:是否異步發送郵件。
  • smtpServer:SMTP 伺服器地址。

錯誤過濾

設置 ELMAH 過濾不需要記錄的錯誤,例如忽略 404 錯誤:

<errorFilter>
  <test>
    <equal binding="HttpStatusCode" value="404" type="Int32" />
  </test>
</errorFilter>

日誌大小限制

為了防止錯誤日誌文件過大,設置日誌文件的大小限制:

<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" maxSize="100" />

上述配置將單個日誌文件的最大大小限制為 100MB。

數據庫存儲選項

若不想使用 XML 文件存儲錯誤日誌,可以選擇將錯誤日誌存儲至 SQL Server:

<errorLog type="Elmah.SqlErrorLog, Elmah"
          connectionStringName="elmah-sql" />

需要在 Web.config 中定義相應的 connectionString。

保護 ELMAH 錯誤日誌頁面

為了防止未授權訪問 ELMAH 頁面,可以設置訪問控制:

<location path="elmah.axd">
  <system.web>
    <authorization>
      <allow roles="Admin" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

ELMAH 配置總覽

配置項目 描述 範例
錯誤日誌儲存位置 設置錯誤日誌的存儲方式和位置。 <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" maxSize="100" />
錯誤郵件通知 配置發生錯誤時的郵件通知設置。 <errorMail from="noreply@yoursite.com" to="admin@yoursite.com" subject="Error Notification" async="true" smtpServer="smtp.yoursite.com" />
錯誤過濾 定義需要過濾掉的不需要記錄的錯誤類型。 <errorFilter> <test> <equal binding="HttpStatusCode" value="404" type="Int32" /> </test> </errorFilter>
安全性設置 控制 ELMAH 錯誤日誌頁面的訪問權限。 <security allowRemoteAccess="false" />
數據庫存儲 將錯誤日誌存儲至數據庫。 <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sql" />

常見問題與解決方案

ELMAH 頁面無法訪問

若訪問 http://yoursite/elmah.axd 時出現 404 錯誤,請確認以下幾點:

  • 確保 ELMAH 的配置已正確添加至 Web.config。
  • 檢查是否已重啟 IIS 站台。
  • 確認路徑地址是否正確,且 elmah.axd 文件存在。
  • 檢查是否有網絡防火牆或其他安全設置阻擋訪問。

ELMAH 無法記錄錯誤

若 ELMAH 無法記錄應用程式錯誤,請檢查以下項目:

  • 確認 ELMAH 的錯誤日誌存儲位置具有寫入權限。
  • 確保 errorLog 參數設置正確,並指向有效的目錄或數據庫。
  • 檢查是否有其他錯誤導致 ELMAH 模組未能正確運行。

ELMAH 記錄的錯誤資訊不完整

若 ELMAH 記錄的錯誤資訊缺失,請確認:

  • 應用程式的錯誤處理機制是否與 ELMAH 相容。
  • ELMAH 的配置中是否有錯誤過濾器過於嚴格,導致部分錯誤未被記錄。

結論

透過上述詳細步驟,您可以在無原始碼的 IIS 10 站台上成功安裝並配置 ELMAH 工具,以有效監控和管理應用程式錯誤。正確的配置不僅能夠幫助您快速定位並修復錯誤,還能透過郵件通知功能即時獲取錯誤資訊,提高應用程式的穩定性和可靠性。請根據您的具體需求和安全要求,靈活調整 ELMAH 的參數設置,確保最優的運行效果。


參考資料


Last updated January 23, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI