ASP.NET - AppDomain がシャットダウンされた理由を取得してみる
アプリケーションがリスタートされるタイミングを調べていたときに ApplicationShutdownReason という enum 値を見つけました。この値から AppDomain がシャットダウンされた理由、たとえば bin フォルダ内のファイルが変更されたからとか、web.config が変更されたからというのがわかるようです。
ApplicationShutdownReason 列挙体 (System.Web)
で、この値は HostingEnvironment.ShutdownReason プロパティから取得できます。
HostingEnvironment.ShutdownReason プロパティ (System.Web.Hosting)
ということで、試しに Global.asax の Application_End でこの値をログ出力してみます。ログ出力には NLog を使用します。
// Global.asax.cs public class MvcApplication : System.Web.HttpApplication { private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); protected void Application_End() { _logger.Info( string.Format("Application_End:{0}", HostingEnvironment.ShutdownReason)); } }
念のため NLog.config はこんな感じ。
<?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" encoding="utf-8" fileName="${basedir}/../Log/${shortdate}.log" layout="${message}" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="file" /> </rules> </nlog>
といった簡単なプログラムをデプロイして試してみます。
bin フォルダ内のファイルを上書きしてみる
Application_End:BinDirChangeOrDirectoryRename
IIS でアプリケーションプールをリサイクルしてみる
Application_End:HostingEnvironment
アプリケーションルートの web.config を開いて上書き保存してみる
Application_End:ConfigurationChange
確かに取得できてますね。
IIS8(Windows Server 2012 R2)で確認しました。