IIS中默认网站重启时如何向事件查看器写入日志?
解决方案总览
你要的效果有两种可行实现路径,分别对应IIS配置和ASP.NET代码实现两种场景:
方案1:通过IIS自带配置实现(无需修改应用代码)
IIS本身默认就会记录站点、应用池的重启/回收事件到Windows事件查看器,也支持开启更详细的操作审核:
- 默认生成的重启日志路径:事件查看器 > Windows日志 > 系统,事件来源为
WAS(Windows进程激活服务)或IIS-IISManager,会记录操作时间、操作对象等基础信息 - 如需捕获通过IIS管理器触发的手动操作事件,可开启IIS审核功能:
- 打开IIS管理器,点击根节点(你的服务器名称),找到「管理」分类下的「审核」选项
- 启用审核功能,勾选「站点启动/停止」「应用池回收/重启」相关的事件类别
- 配置完成后,所有通过IIS管理器触发的重启操作都会自动写入事件查看器,包含操作人、操作详情等完整信息
方案2:通过ASP.NET应用层实现(支持自定义日志内容)
如果需要写入自定义的业务相关信息,可以利用ASP.NET的应用生命周期事件实现:
- 对于ASP.NET Framework:在
Global.asax文件的Application_End事件中添加写事件日志的代码即可,这个事件会在应用池重启、站点关停时自动触发
示例代码片段:protected void Application_End(object sender, EventArgs e) { string logSource = "你的自定义应用标识"; string logMessage = $"应用于 {DateTime.Now:yyyy-MM-dd HH:mm:ss} 触发重启,操作来源:IIS管理器"; // 提前手动创建事件源可避免权限问题 if (!EventLog.SourceExists(logSource)) { EventLog.CreateEventSource(logSource, "Application"); } EventLog.WriteEntry(logSource, logMessage, EventLogEntryType.Information, 1001); } - 对于ASP.NET Core:在
Program.cs中注册IHostApplicationLifetime,监听ApplicationStopping事件即可实现相同效果 - 注意:需要给应用池对应的运行身份授予事件日志写入权限,避免权限不足导致写入失败
选型建议
如果仅需要记录重启操作的基础信息,优先选择IIS自带配置方案,无需改动代码稳定性更高;如果需要添加自定义业务字段、上下文信息,再选择ASP.NET代码实现方案。
内容的提问来源于stack exchange,提问作者scottmeyer
相关产品推荐
相关产品推荐

