【问题标题】:Singleton compact Logger for ASP.NET applications用于 ASP.NET 应用程序的单例紧凑型 Logger
【发布时间】:2023-03-28 11:05:01
【问题描述】:

我编写了一个Singeton 紧凑型记录器,它对于ASP.NET 应用程序非常方便。只需引用它,然后 Logger.Log.Info("Hello world!");。它还会自动记录未处理的异常。

有时我在尝试创建日志文件 Stream 时遇到错误。

例外是:

该进程无法访问文件 'C:\inetpub\wwwroot\MyApp\Logs\5-22-2011.log',因为它正被另一个进程使用..

我检查了进程资源管理器,只有 w3wp.exe 可以处理日志文件。似乎不同的线程造成了问题。这大约每 24 小时发生一次!

【问题讨论】:

标签: c# asp.net logging singleton


【解决方案1】:

如果它定期发生,您可能需要检查 IIS 设置并查看应用程序池是否每隔 24 小时回收一次。 (我认为从记忆中默认是29h)

如果是这种情况,您的问题可能是由于 IIS 在旧应用程序池仍在处理请求(重叠回收 - 这是默认行为)时“启动”新应用程序池引起的,即新的 Logger 正在尝试在旧进程调用其析构函数之前在新进程中实例化。

编辑:忘了提(我写答案时已经很晚了),缓解这种情况的一种方法是更改​​日志文件名以包含完整的日期和时间。

【讨论】:

  • 是的,这是我首先想到的。一个 w3wp.exe 可以托管多个应用程序域,在这种情况下可能会发生这种冲突。
  • 对。就是这样(默认回收间隔是 29 小时,想知道为什么不是 24 小时)。这样很多库在 ASP.NET 中使用之前需要更改
猜你喜欢
  • 2020-08-18
  • 2011-03-25
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多