2017-02-07
先說明一下,Windows 版本、IIS版本、Elmah版本、Visual Studio版本、.NET Framework 版本差異可能會影響設定方法和成功與否,之前找的某些文章就發生無法成功的事情,這篇是自己測試成功後寫下的。
ELMAH => Error Logging Modules and Handlers
環境:Windows Server 2016 + IIS Web Server + SQL Server 2016 Standard
工具:Visual Studio 2015 with Update 3
<?xml version="1.0" encoding="utf-8"?>
<packages><package id="elmah" version="1.2" targetFramework="net462" /> <package id="elmah.sqlserver" version="1.2" targetFramework="net462" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net462" /> <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net462" developmentDependency="true" /> </packages> |
web.config 內容
<?xml version="1.0" encoding="utf-8"?> <!-- 如需如何設定 ASP.NET 應用程式的詳細資訊,請造訪 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.6.2" /> <httpRuntime targetFramework="4.6.2" /> </system.web> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /> </compilers> </system.codedom> <elmah> <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" /> </elmah> <connectionStrings> <!-- TODO: Replace the ****'s with the correct entries --> <add name="elmah-sqlserver" connectionString="Data Source=****;User ID=****;Password=****;Initial Catalog=****;" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration> |
其中資料庫連線帳號密碼要設定,要修改 Data Source、User ID、Password、Initial Catalog 等值。
(下圖) 資料庫和 Table 必須手動建立,App_Readme 目錄下有個 Elnmah.SqlServer.sql 可以建立 table,但是不會建立 Database
(下圖) 可以放到一個新建立的 Database (如果要使用現有的資料庫也可以)
(下圖) 步驟3可以選剛新建立的資料庫,或一個現有的資料庫
輸出用的資料庫和 Table 建立好了。
接下來做個測試網站和網頁。
(下圖) 發行 (Deploy) 到本機 Windows Server 2016 II Web Server 上
(下圖) localhost 網站出現錯誤
HTTP 錯誤 500.19 - Internal Server Error
無法存取要求的網頁,因為與該網頁相關的設定資料不正確。
(下圖) localhost 網站 elmah 也出現錯誤
********************************************************************************
如何解決呢,幾經測試,發現把 elmah 1.2.0版本更新到 1.2.2 版可以解決
packages.config 內容
web.config 內容 (發生巨大變化)
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="elmah" version="1.2.2" targetFramework="net462" /> <package id="elmah.corelibrary" version="1.2.2" targetFramework="net462" /> <package id="elmah.sqlserver" version="1.2" targetFramework="net462" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net462" /> <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net462" developmentDependency="true" /> </packages> |
web.config 內容 (發生巨大變化)
<?xml version="1.0" encoding="utf-8"?> <!-- 如需如何設定 ASP.NET 應用程式的詳細資訊,請造訪 http://go.microsoft.com/fwlink/?LinkId=169433 --> <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> <system.web> <compilation debug="true" targetFramework="4.6.2" /> <httpRuntime targetFramework="4.6.2" /> <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> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /> </compilers> </system.codedom> <elmah> <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" /> <!-- See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for more information on remote access and securing ELMAH. --><security allowRemoteAccess="false" /></elmah> <connectionStrings> <!-- TODO: Replace the ****'s with the correct entries --> <add name="elmah-sqlserver" connectionString="Data Source=.;User ID=sa;Password=P@ssw0rd;Initial Catalog=ElmahDB;" providerName="System.Data.SqlClient" /> </connectionStrings> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules> <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><location path="elmah.axd" inheritInChildApplications="false"> <system.web> <httpHandlers> <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> </httpHandlers> <!-- See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for more information on using ASP.NET authorization securing ELMAH. <authorization> <allow roles="admin" /> <deny users="*" /> </authorization> --> </system.web> <system.webServer> <handlers> <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> </handlers> </system.webServer> </location></configuration> |
(下圖) 再次發行到網站上,這次運作正常了。
在網站的網址後面加上 elmah.axd 就可以看到一些沒有攔截到的 例外 (Exception) 資訊
,預設只有本機可以看到 Elmah Error Log
想讓遠端檢視,請看這篇
[研究][C#][ASP.NET] ELMAH 簡易試用-遠端檢視 (Win 2016)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-win-2016.html
(完)
相關
[研究][C#][ASP.NET] ELMAH.dll for .NET 4.6.2 編譯
http://shaurong.blogspot.com/2017/02/caspnet-elmahdll-for-net-462.html
[研究][C#][ASP.NET] ELMAH 簡易試用 - 輸出到 SQL Server (Win 2016)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-sql-server-win-2016.html
[研究][C#][ASP.NET] ELMAH 簡易試用 (Win 2016 + IIS + WebForm)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-win-2016-iis-webform.html
[研究][C#][ASP.NET] ELMAH 簡易試用-遠端檢視 (Win 2016)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-win-2016.html
[研究][C#] ELMAH - ASP.NET錯誤記錄模組 (Error Logging Modules and Handlers)(NuGet安裝)
http://shaurong.blogspot.com/2016/04/c-elmah-aspnet-error-logging-modules.html
相關
[研究][C#][ASP.NET] ELMAH.dll for .NET 4.6.2 編譯
http://shaurong.blogspot.com/2017/02/caspnet-elmahdll-for-net-462.html
[研究][C#][ASP.NET] ELMAH 簡易試用 - 輸出到 SQL Server (Win 2016)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-sql-server-win-2016.html
[研究][C#][ASP.NET] ELMAH 簡易試用 (Win 2016 + IIS + WebForm)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-win-2016-iis-webform.html
[研究][C#][ASP.NET] ELMAH 簡易試用-遠端檢視 (Win 2016)
http://shaurong.blogspot.com/2017/02/caspnet-elmah-win-2016.html
[研究][C#] ELMAH - ASP.NET錯誤記錄模組 (Error Logging Modules and Handlers)(NuGet安裝)
http://shaurong.blogspot.com/2016/04/c-elmah-aspnet-error-logging-modules.html
沒有留言:
張貼留言